EF上手过程中的一些问题
EF版本:6.0
Donet版本:4.5
常见错误:
更新条目时出错。有关详细信息,请参阅内部异常。
不能将值 NULL 插入列 'CreatedByUserId',表 'test.dbo.AmsEntityInfo';列不允许有 Null 值。INSERT 失败。\r\n语句已终止。
无法识别:DatabaseGenerated特性
要点如下:
1. 不能使用C#类型字段作为实体字段
1 //异常:更新条目时出错。有关详细信息,请参阅内部异常。 2 //public int CreatedByUserId = 0; 3 //正确写法 4 public int CreatedByUserId 5 { 6 get; set; 7 }
2. C#类型属性必须同时存在get;set;
1 //更新条目时出错。有关详细信息,请参阅内部异常。 2 //public int CreatedByUserId 3 //{ 4 // get; 5 //} = 0; 6 //正确写法 7 public int CreatedByUserId 8 { 9 get; set; 10 }
3. C#类型属性的set访问器可以是私有的
1 //正确写法 2 public int CreatedByUserId 3 { 4 get; private set; 5 } 6 7 //正确写法 8 public int CreatedByUserId 9 { 10 get; internal set; 11 } 12 //正确写法 13 public int CreatedByUserId 14 { 15 get; protected set; 16 }
4. 当存在KeyAttribute特性时,EF会将该属性作为主键
5. 当存在外键时,可以在DbContext类的OnModelCreating方法中维护外键关系
6. EF6必须使用DotNet4.5或以上版本,否则无法识别DatabaseGenerated特性
7. 类上面的Table特性标识表名
8. 字段不能是显示实现的接口成员
1 //更新条目时出错。有关详细信息,请参阅内部异常。 2 //int IAmsEntityInfo.CreatedByUserId 3 //{ 4 // get; set; 5 //} 6 7 //正确写法 8 public int CreatedByUserId 9 { 10 get; set; 11 }
9. DatabaseGeneratedAttribute特性
DatabaseGeneratedOption.None指示该列不做特殊处理
DatabaseGeneratedOption.Identity要求该列是整形或长整型,并在数据库中设置为自增长标识列
DatabaseGeneratedOption.Compute在插入操作时,不会将真实值插入数据库。取而代之的是null值。要求该列可以为空,且存在默认值约束或触发器生成。插入数据库后,EF会自动更新该字段的值到实体中。

浙公网安备 33010602011771号