时间:2021-07-01 10:21:17 帮助过:6人阅读
public class Person { [Key] public Guid SocialSecurityNumber { get; set; } public string FirstName { get; set; } public string LastName { get; set; } }
var person = new Person { FirstName = "Rowan", LastName = "Miller", }; using (var context = new BreakAwayContext()) { context.People.Add(person); context.SaveChanges(); }
插入第二条记录的时候就会报错了。所以,下面的模型设置才是正确的。
public class Person { [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)] public Guid SocialSecurityNumber { get; set; } public string FirstName { get; set; } public string LastName { get; set; } }
现在我们来看看有些情况配置为None也是有用的。修改一下上面的模型。
public class Person { [Key] public int SocialSecurityNumber { get; set; } public string FirstName { get; set; } public string LastName { get; set; } }
我们再插入一条记录看看
var person = new Person { FirstName = "Rowan", LastName = "Miller", SocialSecurityNumber = 12345678 }; using (var context = new BreakAwayContext()) { context.People.Add(person); context.SaveChanges(); }
在数据库中存储的是1,并不是我们所想要的12345678.这是为什么呢?
因为主键是SocialSecurityNumber是Int类型,Code First在数据库中对该列作自增长处理。这时,我们想再插入自定义的SocialSecurityNumber就不行了。
所以当我们想这样做时,就应该把SocialSecurityNumber的自增长配置为None.
public class Person { [Key, DatabaseGenerated(DatabaseGeneratedOption.None)] public int SocialSecurityNumber { get; set; } public string FirstName { get; set; } public string LastName { get; set; } }
如果对属性标识为Computed,EF会认为该列是通过其它列计算得出的,不会将其持久化到数据库中。
public class Person { [Key, DatabaseGenerated(DatabaseGeneratedOption.None)] public int SocialSecurityNumber { get; set; } public string FirstName { get; set; } public string LastName { get; set; } [DatabaseGenerated(DatabaseGeneratedOption.Computed)] public string Name { get; set; } }
var person = new Person { FirstName = "Rowan", LastName = "Miller", SocialSecurityNumber = 1231478, Name = "Rowan Miller", }; using (var context = new BreakAwayContext()) { context.People.Add(person); context.SaveChanges(); }
查看数据库,我们看到Name并没有存储任何值。
Entity Framework 数据生成选项DatabaseGenerated【转】
标签:itblog 标识 表示 自动 修改 插入 技术 数据 gui