参阅: https://msdn.microsoft.com/en-us/library/jj591583(v=vs.113).aspx
1. 主键
public class Test { //名称为 ID 的属性会自动映射为主键(自增长,唯一性,不为空) public long ID { get; set; } }
public class Test { //Key 特性可将属性映射为主键(自增长,唯一性,不为空) [Key] public string Key { get; set; } }
public class Test { //Key 特性可将属性映射为主键 //使用 DatabaseGenerated 特性可取消主键自增长 [Key] [DatabaseGenerated(DatabaseGeneratedOption.None)] public long ID { get; set; } }
public class Test { // Guid 类型的主键默认没有自动生成,所以记得设置 DatabaseGenerated 特性 [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public Guid ID { get; set; } }
2. 外键
public class TestA { public long ID { get; set; } public string Name { get; set; } //导航属性, 子表集合 public virtual ObservableCollection<TestB> TestBs { get; set; } } public class TestB { public long ID { get; set; } //外键, 命名约定为: 主表类名+主表主键名 public long TestAID { get; set; } //导航属性, 主表类对象(与主表的导航属性可二选一) public virtual TestA TestA { get; set; } public DateTime DateTime { get; set; } }
3. 使用 [NotMapped] 特性可取消属性到数据库的映射,即在操作数据库时忽略此属性,创建数据库时也不会创建此字段
4. 唯一性,EntityFramework没有[Unique]特性,但6.1+版本可以使用[Index]特性实现唯一性(唯一性约束与唯一性索引基本相同,都可以实现字段的唯一性)
当[Index]特性的IsUnique=true时会有一个字符限制(好像是限制为900字节),所以要添加一个长度限制的特性
public class User { public int ID { get; set; } [Index(IsUnique = true)] [StringLength(200)] public string UserName { get; set; } public string DisplayName { get; set; } }