在EF中,我们建立数据模型的时候,可以给属性配置数据生成选项DatabaseGenerated,它后有三个枚举值:Identity、None和Computed。

Identity:自增长

None:不处理

Computed:表示这一列是计算列。

在EF中,如果主键是int类型,Code First生成数据库的时候会自动设置该列为自增长。但如果主键是Guid类型,我们就要手动的去设置了。

对于下面的模型,如果我们没有设置自增长,数据库中会以0来填充

 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的更多相关文章

  1. Entity Framework 数据生成选项DatabaseGenerated(转)

    在EF中,我们建立数据模型的时候,可以给属性配置数据生成选项DatabaseGenerated,它后有三个枚举值:Identity.None和Computed. Identity:自增长 None:不 ...

  2. Entity Framework 数据生成选项DatabaseGenerated【转】

    在EF中,我们建立数据模型的时候,可以给属性配置数据生成选项DatabaseGenerated,它后有三个枚举值:Identity.None和Computed. Identity:自增长 None:不 ...

  3. Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询

    Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询     SQL 中,有SQL Server Profiler可以用来查询性能以及查看外部调用的SQL ...

  4. "Entity Framework数据插入性能追踪"读后总结

    园友莱布尼茨写了一篇<Entity Framework数据插入性能追踪>的文章,我感觉不错,至少他提出了问题,写了出来,引起了大家的讨论,这就是一个氛围.读完文章+评论,于是我自己也写了个 ...

  5. Entity Framework Core生成的存储过程在MySQL中需要进行处理及PMC中的常用命令

    在使用Entity Framework Core生成MySQL数据库脚本,对于生成的存储过程,在执行的过程中出现错误,需要在存储过程前面添加 delimiter // 附:可以使用Visual Stu ...

  6. Entity Framework 自动生成CodeFirst代码

    前言 在前面的文章中我们提到Entity Framework的“Code First”模式也同样可以基于现有数据库进行开发.今天就让我们一起看一下使用Entity Framework Power To ...

  7. Entity Framework查询生成大量的子查询,如何避免?求救

    最近使用Entity Framework做一个中型的项目,一张表含有千万条数据,并没有使用很复杂的查询,只是程序上使用了DTO进行帅选数据,且使用了分页,效果很不理想.经过跟踪sql,我发现很多简单的 ...

  8. asp.net mvc常用的数据注解和验证以及entity framework数据映射

    终于有时间整理一下asp.net mvc 和 entity framework 方面的素材了. 闲话少说,步入正题: 下面是model层的管理员信息表,也是大伙比较常用到的,看看下面的代码大伙应该不会 ...

  9. .NET基础篇——Entity Framework 数据转换层通用类

    在实现基础的三层开发的时候,大家时常会在数据层对每个实体进行CRUD的操作,其中存在相当多的重复代码.为了减少重复代码的出现,通常都会定义一个共用类,实现相似的操作,下面为大家介绍一下Entity F ...

随机推荐

  1. Kinetic使用注意点--group

    new Group(config) 参数: config:包含所有配置项的对象. { x: "横坐标", y: "纵坐标", width: "宽度&q ...

  2. IOS设备滑动事件

    只要手指触摸屏幕,滑动,从屏幕离开,系统都会产生UIEvent对象类型的事件---当然包括UITouch事件 – touchesBegan:withEvent:   当用户触摸到屏幕时调用方法 – t ...

  3. ExtJs 4.2 treePanel 点击树节点 传送参数到后台(多个参数)

    //***********************************************左边树开始********************************************** ...

  4. 微软职位内部推荐-SDE II-MODC-Beijing

    微软近期Open的职位: JOB TITLE: Software Design Engineer IIDEPARTMENT: Microsoft Office Division ChinaIMMEDI ...

  5. shell 实现word count

    awk '{arr[$2]+=$1}END{for (i in arr) print i,arr[i]}' sort_all.txt | sort -k2nr -g

  6. vs2010 使用SignalR 提高B2C商城用户体验(二)

    vs2010 使用SignalR 提高B2C商城用户体验(二) 上一节,已经实现了,当前域内的通信,这一节中,介绍一下跨域的即时通信,既然要做,我们肯定要把这个推送及聊天服务器做为一个单独的服务器,以 ...

  7. HTML元素大小和位置相对于谁的问题

    一.如果元素的position属性值为absolute,那么此时分为两种情况: 1. 父级(包括直接父级和间接父级)元素中没有定义position属性(即默认属性static),那么该元素会参照页面, ...

  8. 2329: [HNOI2011]括号修复 - BZOJ

    恶心的splay,打标记的时候还有冲突,要特别小心 上次写完了,查了半天没查出错来,于是放弃 今天对着标程打代码,终于抄完了,我已经不想再写了 const maxn=; type node=recor ...

  9. BZOJ 1593: [Usaco2008 Feb]Hotel 旅馆

    Description 奶牛们最近的旅游计划,是到苏必利尔湖畔,享受那里的湖光山色,以及明媚的阳光.作为整个旅游的策划者和负责人,贝茜选择在湖边的一家著名的旅馆住宿.这个巨大的旅馆一共有N (1 &l ...

  10. Android名词解释

    System Bars.Status Bar.Navigation Bar System Bars-->the Status bars and Navigation bars.