2014-03-03 18 views
1

如何使用實體框架將數據保存到一個事務中的多個表中?使用實體框架在一個事務中將數據保存在多個表中

我有多個無效的方法,我填充上下文,但我想保存在一個事務,而不是多次保存它。這樣做的最好方法是什麼?

namespace DataAccess.Services 
{ 
    public class Submissions 
    { 
     DataContext Context; 

     public Submissions() 
     { 
      Context = new DataContext(); 
     } 

     public void InsertAllData() 
     { 
      //Save all data at once for all below contexts 
      //DataContext.SaveChanges(); 
     } 

     void InsertObject1(int Object1Id) 
     { 
       var obj1 = new DataAccess.Entity.Object1(); 

       obj1.Field1 = .... 
       obj1.Field2 = .... 
       ..... 

       DataContext.Objects.Add(obj1); 
     } 

     void InsertObject2(int Object2Id) 
     { 
       var obj2 = new DataAccess.Entity.Object2(); 

       obj2.Field1 = .... 
       obj2.Field2 = .... 
       ..... 

       DataContext.Objects.Add(obj2); 
     } 

     void InsertObject3(int Object3Id) 
     { 
       var obj3 = new DataAccess.Entity.Object3(); 

       obj3.Field1 = .... 
       obj3.Field2 = .... 
       ..... 

       DataContext.Objects.Add(obj3); 
     } 

    } 
} 

回答

4

您的示例代碼看起來不錯。
實體框架是一個更改跟蹤器並跟蹤所有更改。您在上下文中對對象所做的每一項更改都將在本地存儲,並且當您撥打DataContext.SaveChanges();時,所有更改都將立即提交。
因此,在這種情況下,如果您隨後調用您的InsertObject1,然後InsertObject2InsertObject3,然後DataContext.SaveChanges();,一切都將一次存儲。

如果你的意思是你如何能做到這一切在SQL數據庫事務中,你可以看到如何在這裏使用的:http://msdn.microsoft.com/en-us/data/dn456843

相關問題