關於這段時間學習 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的寫法。 這樣執行會有問題麼?

請看這兩張圖

 

執行順序不對你說,如果是在一個系統內,恰好有先後順序的依賴關係,那就真的出問題了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章