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             }
View Code

 

2.  C#类型属性必须同时存在get;set;

 1             //更新条目时出错。有关详细信息,请参阅内部异常。
 2             //public int CreatedByUserId
 3             //{
 4             //    get;
 5             //} = 0;
 6             //正确写法
 7             public int CreatedByUserId
 8             {
 9                 get; set;
10             }
View Code

 

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             }
View Code

 

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             }
View Code

 9.  DatabaseGeneratedAttribute特性

  DatabaseGeneratedOption.None指示该列不做特殊处理

  DatabaseGeneratedOption.Identity要求该列是整形或长整型,并在数据库中设置为自增长标识列

  DatabaseGeneratedOption.Compute在插入操作时,不会将真实值插入数据库。取而代之的是null值。要求该列可以为空,且存在默认值约束或触发器生成。插入数据库后,EF会自动更新该字段的值到实体中。

 

  

posted @ 2015-11-11 20:00  次奥君  阅读(459)  评论(0)    收藏  举报