zoukankan      html  css  js  c++  java
  • 关于这段时间学习 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,那我就跟着大拿用吧,让我自己用,肯定是不会用的。  

     有这么个业务逻辑,怎么实现

    1 如果用EF,写这么个逻辑是没办法正常执行的
    2 1、先保存一个对象
    3 2、删除ID>5的数据
    4 3、保存一个对象
    5 4、修改ID>5的对象,(条件里包含第一次保存的对象)
    6 然后,EF,貌似实现不了这样的事务

     正常的代码应该是类似这样的

     1  using (TransactionScope transaction = new TransactionScope())
     2             {
     3                 t.Area.Add(new Area() { Code = "A", Name = "A" });
     4                 var dfe4 = from a in t.Area where a.Id > 5 select a;
     5                 dfe4.Delete();
     6                 t.Area.Add(new Area() { Code = "B", Name = "B" });
     7                 (from a in t.Area where a.Id > 5 select a).Update(a2 => new Area() { Name = "IM:" });
     8 
     9                 var f234 = from a in t.Area where a.Id > 5 && a.Name == "IM:" select a;
    10                 Area a234 = f234.First();
    11                 if (a234 != null)
    12                 {
    13                     a234.Name = "IM:234";
    14                     Area a235 = f234.Where(e => e.Id == a234.Id + 2).FirstOrDefault();
    15                     if (a235 != null)
    16                     {
    17                         t.Area.Remove(a235);
    18                     }
    19                 }
    20                 t.SaveChanges();
    21                 Console.WriteLine("------------");
    22                 Console.ReadLine();
    23                 transaction.Complete();
    24             }

    这是使用了 EntityFramework.Extend的写法。 这样执行会有问题么?

    请看这两张图

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

  • 相关阅读:
    linux网络配置
    第二章 以太网和数据封装
    linux用户权限
    第一章 网络互联
    linux学习之文件系统
    史上最全Java学习视频下载地址分享
    JAVA高级特性之集合
    Map集合不继承Collection接口,(HashMap类和TreeMap类)---输出结果,如果将Key值修改为首位不为0,HashMap输出就是随机顺序的,求指导,为什么为会这样???
    java中this关键字
    Java long数据类型---网上学习到的资料
  • 原文地址:https://www.cnblogs.com/ZhyjEye/p/5667924.html
Copyright © 2011-2022 走看看