EntityFramework:我想我需要和 Session.Save 語義一樣的方法


背景

EntityFramework 中 DbSet.Add 方法不會導致立即執行 insert 語句,這在長事務中非常有用,不過多數用例都是短事務的,為何我需要一個立即執行 insert 語句的方法呢?本文就是在思考這個問題。

先看一個代碼

代碼

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 using EntityFrameworkStudy.Studys;
 8 
 9 namespace EntityFrameworkStudy
10 {
11     class Program
12     {
13         static void Main(string[] args)
14         {
15             using (var context = new StudyContext())
16             {
17                 context.Database.ExecuteSqlCommand("DELETE FROM Articles WHERE Title = '鴨梨'");
18 
19                 AddNotExistArticle(context);
20                 AddNotExistArticle(context);
21 
22                 context.SaveChanges();
23 
24                 Console.WriteLine(context.Articles.Where(x => x.Title == "鴨梨").Count());
25             }
26         }
27 
28         private static void AddNotExistArticle(StudyContext context)
29         {
30             var order = context.Articles.FirstOrDefault(x => x.Title == "鴨梨");
31             if (order == null)
32             {
33                 context.Articles.Add(new Article() { Title = "鴨梨" });
34             }
35         }
36     }
37 }

輸出結果為 2,而我原本期望的結果是 1。

正常的思考思路是:我已經 Add 了,再用 FirstOrDefault 查詢就應該能獲取到,這在一個真實的項目場景中(調用棧不是這么簡單、涉及批量操作),這種 Bug 非常容易形成。

如何模擬 Session.Save 的語義

NHibernate 中的 Session.Save 會立即執行 insert 語句,如何模擬這種語義呢?

還沒有想到方法,朋友們給點意見。

備注

今天為問題而來。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM