关于这段时间学习 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的 一点感悟

关于这段时间学习 EntityFramework的 一点感悟

执行顺序不对你说,如果是在一个系统内,恰好有先后顺序的依赖关系,那就真的出问题了。

上一篇:Python单元测试框架之pytest 4 -- 断言


下一篇:thinkphp下多语言