EF-CodeFirst-2玩的嗨
时间戳、复杂类型、GUID自增长
GUID自增长
GUID用于当主建那是好处多多,但是和int不同。EF不会自动识别第一个为类名+Id开头或int类型字段 去设置自增长。尴尬的GUID怎么玩呢。。
Data Annation玩法

Fluent API 玩法

注:上面的设置好像没什么用,至少我是没跑起来。。。故而使用的是构造函数玩法。。。
时间戳
好处多多的东西啊,对于一些并发的业务来说建表的时候是一定要有这个的。但是某些原因….. 这就尴尬了 。。
最重要的一点是乐观锁,什么是乐观锁呢?
在并发的时候,A、B两个线程同时拿到一条记录然后进行更新再插入数据库。这样会导致A、B都成功了!对于一些抢单的来说这样是不可以的。乐观锁则是在第一次更新的时候把时间戳也更新一下。另一个线程更新的时候会判断当前的与表里的时间戳不一致的话。那就失败了。

Fluent API 玩法

下面开始模拟并发,aContext先拿到更改一下字段值,紧接着bContext也拿到了更新了一字段值并保存。这时aContext再去保存

后面执行,bContext的成功保存!而aContext则报错


假如像我这种尴尬的情况,表已经这样了。应该怎么做乐观锁呢?可以使用 ConcurrencyCheck对某个唯一的字段进行注解,也可以达到控制并发的效果
复杂类型
随着业务的扩展,表中的字段自然是越来越多,实体越来越膨胀。想想这会带来什么后果?恶心的类,大多无用的返回值,结构不清晰。这些都是需我们去注意的。
这里假如项目第一版我们的用户只有Name字段,但是在第二版需要加上地址。那简单,直接在User类中直接加地址,但是上面说这样是不好的。我们应该去 "扩展"。那也简单,新建一个实体就是咯,然后在User中加入 属性。但是!这样会自动映射外建关系。这时我们就需要复杂类型了
复杂类型没有ID //这里有些错误 [Table(xxx)] 是没用的。因为不是创建新的表

在User类中进行扩展

搞定后,再Update-DataBase 一下

额。。。这就尴尬了。怎么还是在一个表中?之前是我理解错了。我们代码中的实体膨胀问题是解决了但是表中还是并没有。这里我个人还是建议单弄一个表,把不属于表的"核心属性"放到扩展表中,这样也算不错吧。好歹代码中不是这么恶心了
EF-CodeFirst-2玩的嗨的更多相关文章
- 1.【使用EF Code-First方式和Fluent API来探讨EF中的关系】
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/relationship-in-entity-framework-using-code-firs ...
- [.NET领域驱动设计实战系列]专题一:前期准备之EF CodeFirst
一.前言 从去年已经接触领域驱动设计(Domain-Driven Design)了,当时就想自己搭建一个DDD框架,所以当时看了很多DDD方面的书,例如领域驱动模式与实战,领域驱动设计:软件核心复杂性 ...
- [转]Using Entity Framework (EF) Code-First Migrations in nopCommerce for Fast Customizations
本文转自:https://www.pronopcommerce.com/using-entity-framework-ef-code-first-migrations-in-nopcommerce-f ...
- EF CodeFirst 如何通过配置自动创建数据库<当模型改变时>
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本篇为进阶篇,也是弥补自己之前没搞明白的地方,惭愧 ...
- EF CodeFirst增删改查之‘CRUD’
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本篇旨在学习EF增删改查四大操作 上一节讲述了EF ...
- EF CodeFirst 创建数据库
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 话说EF支持三种模式:Code First M ...
- 新年奉献MVC+EF(CodeFirst)+Easyui医药MIS系统
本人闲来无事就把以前用Asp.net做过的一个医药管理信息系统用mvc,ef ,easyui重新做了一下,业务逻辑简化了许多,旨在加深对mvc,ef(codefirst),easyui,AutoMap ...
- EF Codefirst 初步学习(二)—— 程序管理命令 更新数据库
前提:搭建成功codefirst相关代码,参见EF Codefirst 初步学习(一)--设置codefirst开发模式 具体需要注意点如下: 1.确保实体类库程序生成成功 2.确保实体表类库不缺少 ...
- EF CodeFirst系列(3)---EF中的继承策略(暂存)
我们初始化数据库一节已经知道:EF为每一个具体的类生成了数据库的表.现在有了一个问题:我们在设计领域类时经常用到继承,这能让我们的代码更简洁且容易管理,在面向对象中有“has a”和“is a”关系 ...
- EF CodeFirst系列(6)---配置1对1,1对多,多对多关系
这一节介绍EF CodeFirst模式中的1对0/1,1对多,多对多关系的配置,只有梳理清楚实体间的关系,才能进行愉快的开发,因此这节虽然很简单但是还是记录了一下. 1. 1对0/1关系配置 1. 通 ...
随机推荐
- 前端见微知著番外篇:Bitbucket进行代码管控
说道代码管控,一般都会提到TFS.Git等,但是在这里我们将要用到Bitbucket,其实其操作方式和Git基本上一样,但是和TFS则有很大的不同了.但是原理基本上都是一致的. 这里我不会过多的涉及到 ...
- ImageMagick常用指令详解
Imagemagick常用指令 (ImageMagick--蓝天白云) (ImageMagick官网) (其他比较有价值的IM参考) (图片自动旋转的前端实现方案) convert 转换图像格式和大小 ...
- 工作随笔——一次简单的Maven加速构建实战
注意:所有的编译.打包.部署全部是通过Jenkins完成的. 公司内部有一个项目,开始做的时候已经预计到会有很多客服端.所以开发就搞了如下的结构: fft-api # 公用的API,所有的程序都必须使 ...
- java并发:线程同步机制之计数器&Exechanger
第一节 CountDownLatch (1)初识CountDownLatch (2)详述CountDownLatch CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的数量. ...
- nios II--实验7——数码管IP软件部分
软件开发 首先,在硬件工程文件夹里面新建一个software的文件夹用于放置软件部分:打开toolsàNios II 11.0 Software Build Tools for Eclipse,需要进 ...
- 【JavaEE企业应用实战学习记录】struts2登录
<%-- login.jsp Created by IntelliJ IDEA. User: Administrator Date: 2016/10/6 Time: 16:26 To chang ...
- 关于#pragma once和#ifndefine组合的区别
最近在看duilib代码,发现头文件既有#pragma once 又有 #ifndefine...#define,忽然就觉得有点不解,因为据我所知这两者都是防止头文件二次包含的. 经过下面两位的解释后 ...
- 十天冲刺---Day7
站立式会议 站立式会议内容总结: 燃尽图 照片 两个人编码其实效率挺高的.但是在一些方面,比如说页面UI的编写,会非常吃力,很难达到自己的效果. 由于埋头在编码,所以issues的增加随之停止. 有点 ...
- windows server2008 r2 下启用 sqlserver 2008的远程连接
首先说明,本文转自互联网. TMD 花了二天,终于找到怎么开启这个远程连接了.....娘的,累死了,写下来,希望能帮助同胞们... 用win server 2008 r2 和sql server 20 ...
- #查看Linux的版本信息
查看Ubuntu的版本信息 cat /etc/issue lsb_release -a 查看Centos的版本信息 cat /etc/centos-release rpm -q centos-rele ...