Entity Framework 数据生成选项DatabaseGenerated【转】
在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【转】的更多相关文章
- Entity Framework 数据生成选项DatabaseGenerated
在EF中,我们建立数据模型的时候,可以给属性配置数据生成选项DatabaseGenerated,它后有三个枚举值:Identity.None和Computed. Identity:自增长 None:不 ...
- Entity Framework 数据生成选项DatabaseGenerated(转)
在EF中,我们建立数据模型的时候,可以给属性配置数据生成选项DatabaseGenerated,它后有三个枚举值:Identity.None和Computed. Identity:自增长 None:不 ...
- Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询
Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询 SQL 中,有SQL Server Profiler可以用来查询性能以及查看外部调用的SQL ...
- "Entity Framework数据插入性能追踪"读后总结
园友莱布尼茨写了一篇<Entity Framework数据插入性能追踪>的文章,我感觉不错,至少他提出了问题,写了出来,引起了大家的讨论,这就是一个氛围.读完文章+评论,于是我自己也写了个 ...
- Entity Framework Core生成的存储过程在MySQL中需要进行处理及PMC中的常用命令
在使用Entity Framework Core生成MySQL数据库脚本,对于生成的存储过程,在执行的过程中出现错误,需要在存储过程前面添加 delimiter // 附:可以使用Visual Stu ...
- Entity Framework 自动生成CodeFirst代码
前言 在前面的文章中我们提到Entity Framework的“Code First”模式也同样可以基于现有数据库进行开发.今天就让我们一起看一下使用Entity Framework Power To ...
- Entity Framework查询生成大量的子查询,如何避免?求救
最近使用Entity Framework做一个中型的项目,一张表含有千万条数据,并没有使用很复杂的查询,只是程序上使用了DTO进行帅选数据,且使用了分页,效果很不理想.经过跟踪sql,我发现很多简单的 ...
- asp.net mvc常用的数据注解和验证以及entity framework数据映射
终于有时间整理一下asp.net mvc 和 entity framework 方面的素材了. 闲话少说,步入正题: 下面是model层的管理员信息表,也是大伙比较常用到的,看看下面的代码大伙应该不会 ...
- .NET基础篇——Entity Framework 数据转换层通用类
在实现基础的三层开发的时候,大家时常会在数据层对每个实体进行CRUD的操作,其中存在相当多的重复代码.为了减少重复代码的出现,通常都会定义一个共用类,实现相似的操作,下面为大家介绍一下Entity F ...
随机推荐
- ZT c++ 中的重载全局new,delete
c++ 中的重载全局new,delete 分类: c++ 2010-08-06 10:31 116人阅读 评论(1) 收藏 举报 deletec++file编译器语言工作 最近做一个小项目,对c++又 ...
- robotframework_如何用Chrome模拟手机打开H5页面
由于公司目前的产品大部分都是APP端的H5页面,APP原生页面很少,测试H5页面如果去搭建appium或者macaca这类自动化平台太费时,太重而不能快速落地:与自动化的目标:提高测试效率相悖.但如果 ...
- BZOJ1856:[SCOI2010]字符串(卡特兰数,组合数学)
Description lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgw ...
- gluon 实现线性回归
from mxnet import autograd, nd num_inputs = 2 num_examples = 1000 true_w = [2,-3.4] true_b = 4.2 fea ...
- Uva 10765 鸽子和炸弹
题目链接:https://vjudge.net/contest/166461#problem/B 题意: 给一个无向图,求每一个点删除后,剩下的连通块的数目: 分析: 只有割顶被删掉后,连通分量才会改 ...
- Fiddler拦截并动态修改网页内容简易教程
Fiddler默认可以拦截全局http请求,再加上它具备的脚本功能,可以很简单的达到动态修改网页内容的目的. 1.启动Fiddler 2.打开Rules->Customize Rules..., ...
- 【luogu P2071 座位安排】 题解
题目链接:https://www.luogu.org/problemnew/show/P2071#sub 邻接表 + 匈牙利 把之前的邻接矩阵匈牙利变成邻接表 要不然存不下... code: #inc ...
- HDU 1045 Fire Net(dfs,跟8皇后问题很相似)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others) ...
- 12java基础继承
26.定义类Human,具有若干属性和功能:定义其子类Man.Woman: 在主类Test中分别创建子类.父类和上转型对象,并测试其特性. package com.hry.test; public ...
- box-shadow的应用技巧
一.box-shadow的参数解析 box-shadow:none; box-shadow: h-shadow v-shadow blur spread color inset; box-shadow ...