关于这段时间学习 EntityFramework的 一点感悟
Ado.Net,用了N多年,Entity Framework也关注了很多年。 每当项目转型的时候,就花费大巴的时间,学习一番,潮流的东西。 这个Orm很多,这个EF很火,这么多年了,我还是不敢用,虽然比当年好多了。
当年也就是12年的时候,实体类是乱七八糟的一大堆,属性里是带功能的,不是单纯的实体类。而且,其他数据库支持的不是特别好。现在,实体类清丽了 很多,想着,用一下吧,却又把我吓到了,其实也没有特别的不好,只是太乱了。 EF 官方的增删该查,最好的就是查询,剩下的三个,不敢恭维,基本的功能还行,如果涉及到批量的操作,就没辙了(自己写扩展除外)
据说,Entity Framework.Extend 扩展的不错,社群里,一大票人都知道,也都看过,怎么到我这,就是越看越不敢用,越看越不放心了。
批量操作,可以说是一大特色,却这个批量操作,写起来倒是很顺溜,仔细一研究,他是直接就生成sql语句执行了,而且还是自己生成了个Command执行的,EF的拦截器根本拦截不到
缓存,倒是挺不错的,这也是个重要的功能,也就是用了EF.Extend的缓存
AuditLog,这个日志审计功能,完全就不该存在,这样说是因为,通过批量操作的,都无法 审计记录。
为什么,我不敢用EF呢?
前些年是DataBase First,后来是Mode First,现在是Code First,既然这样迭代,肯定是EF在改进。但是,我觉得,越改越凌乱了。Code First,让代码更加的繁琐了,关键是,C#代码声明的实体映射与数据库不一样,是会报错的,例如,字段的长度 不一样。而,我只是想 用一下 linq 的溜溜的写法,不再去拼接sql语句。用了EF之后,太多的束缚,如果EF能精简就好多了,而我又精力有限,写不了 Orm 了。 只能自己写Sql了。
其实,我需要的只是,一个精简的EF
个人觉得,我自己写的代码,除了不能Linq,其他的都还好,有 延迟加载,有缓存,有实体生成工具。
这样挺好,待下次了再学习EF 吧。如果哪个项目,必须要用EF,那我就跟着大拿用吧,让我自己用,肯定是不会用的。
有这么个业务逻辑,怎么实现
如果用EF,写这么个逻辑是没办法正常执行的
、先保存一个对象
、删除ID>5的数据
、保存一个对象
、修改ID>5的对象,(条件里包含第一次保存的对象)
然后,EF,貌似实现不了这样的事务
正常的代码应该是类似这样的
using (TransactionScope transaction = new TransactionScope())
{
t.Area.Add(new Area() { Code = "A", Name = "A" });
var dfe4 = from a in t.Area where a.Id > select a;
dfe4.Delete();
t.Area.Add(new Area() { Code = "B", Name = "B" });
(from a in t.Area where a.Id > select a).Update(a2 => new Area() { Name = "IM:" }); var f234 = from a in t.Area where a.Id > && a.Name == "IM:" select a;
Area a234 = f234.First();
if (a234 != null)
{
a234.Name = "IM:234";
Area a235 = f234.Where(e => e.Id == a234.Id + ).FirstOrDefault();
if (a235 != null)
{
t.Area.Remove(a235);
}
}
t.SaveChanges();
Console.WriteLine("------------");
Console.ReadLine();
transaction.Complete();
}
这是使用了 EntityFramework.Extend的写法。 这样执行会有问题么?
请看这两张图


执行顺序不对你说,如果是在一个系统内,恰好有先后顺序的依赖关系,那就真的出问题了。
关于这段时间学习 EntityFramework的 一点感悟的更多相关文章
- 近段时间学习html和CSS的一些细碎总结
1.边框圆角属性:border-radius,取值能够是 百分比 / 自己定义长度,不能够取负值.假设是圆,将高度和宽度设置相等,而且将border-radius设置为100% 2.IE6,IE7,I ...
- 最近一段时间开发客户端app的感悟
关于android和cocos2d 凭着对大学时候写html+css的一点点的记忆,我还是认为android的布局xml文件还是参考了html+css,只是他更加臃肿!就想 android平台本身那样 ...
- 《C#并发编程经典实例》学习笔记—2.1 暂停一段时间
问题: 需要让程序(以异步方式)等待一段时间. 解决方案:Task类的静态函数Delay,返回Task对象 在github开源项目dotnet/coreclr,找到Task.cs有关Delay方法的源 ...
- 专访黄勇:Java在未来的很长一段时间仍是主流(把老板当情人,把同事当小孩,把客户当病人)
url:http://www.csdn.net/article/2015-09-06/2825621 2015-09-06 13:18 摘要:本文采访了现任阿里巴巴公司系统架构师黄勇,从事近十年的Ja ...
- 使用Go语言一段时间的感受
作者 openkk 2012-03-04 18:26:58 文/Windstorm 有一段时间没更新了.最近在忙一个 Server+Client 的项目,Client 是 Android 手机,大概也 ...
- 我想立刻辞职,然后闭关学习编程语言,我给自己3个月时间学习C语言!这样行的通吗
文章背景,回答提问:我想立刻辞职,然后闭关学习编程语言,我给自己3个月时间学习C语言!这样行的通吗? 我的建议是这样:1. 不要辞职.首先说,你对整个开发没有一个简单的了解,或一个系统的入门学习.换句 ...
- 用一天的时间学习Java EE中的SSH框架
首先说明一下,本人目前主要从事.NET领域的工作,但对于C++.Java.OC等语言也略知一二,周末闲来无事,特花费一天的时间学习了一下Java中的SSH框架,希望把学习过程中的心得体会与园友们进行分 ...
- 关于EF第一次加载慢或过一段时间不访问时再次访问加载慢问题的总结
优化方案 1.安装Application Initialization 这是在iis8出来后才有的,iis8内置的功能,而对于iis7.5也提供了一个扩展以支持这个功能. Application In ...
- 项目在tomcat里运行一段时间总是自动崩掉的问题排查与解决
最近的检验系统上线一段时间后,发现系统访问不了,tomcat总是会自动崩掉,一般遇到这种问题,程序员的第一反应都肯定是内存溢出. 确实是,但是java里内存分好几种,堆内存.栈内存.静态内存区等等,下 ...
随机推荐
- jsp前端实现分页代码
前端需要订一page类包装,其参数为 private Integer pageSize=10; //每页记录条数=10 private Integer totalCount; //总记录条数 priv ...
- 使用UIBezierPath绘制图形
当需要画图时我们一般创建一个UIView子类, 重写其中的drawRect方法 再drawRect方法中利用UIBezierPath添加画图 UIBezierPath的使用方法: (1)创建一个Bez ...
- BootStrap_02之全局样式及组件
1.BootStrap指定的四种屏幕尺寸: ①超大PC屏幕--lg(large):w>=1200px: ②中等PC屏幕--md(medium):1200px>w>=992px: ③P ...
- Div Vertical Menu ver5
这个小功能,如果是算此次,已经是第5次修改了.可以从这里看到前4次:V1, http://www.cnblogs.com/insus/archive/2011/10/17/2215637.html V ...
- 说一说python的牛比与不爽
本人写了10年php了.今年开始改写python了.不是说php有什么不好,php在自己的势力范围内还是很牛比的.只是我已经不能满足于php那两亩地了. 习惯了脚本,所以很自然就过度到python了. ...
- iosselect:一个js picker项目,在H5中实现IOS的select下拉框效果
具体文档和demo可以访问github:https://github.com/zhoushengmufc/iosselect 移动端浏览器对于select的展示样式是不一致的,ios下是类似原生的pi ...
- Android Studio —— 创建Menu菜单项
大多数android程序的右上角都会设置一个菜单按钮比如微信的界面右上角的加号. 这个需要在layout同级目录下新建文件夹命名为menu,再右击新建的menu新建xml文件:
- Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define ...
Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define ... 这个错误是因为有两个相 ...
- ionic第一坑——ion-slide-box坑(ion-slide分两页的坑)
ionic.views.Slider = ionic.views.View.inherit({ initialize: function (options) { . . . function setu ...
- 从零自学Hadoop(22):HBase协处理器
阅读目录 序 介绍 Observer操作 示例下载 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,Sour ...