使用实体框架在一个事务中将数据保存在多个表中

use*_*468 2 c# entity-framework asp.net-mvc-4

如何使用实体框架在一个事务中将数据保存到多个表中?

我有多个用于填充上下文的 void 方法,但我想将其保存在一个事务中,而不是多次保存。这样做的最佳方法是什么?

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);
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

Ola*_*laf 5

您的示例代码看起来不错。
实体框架是一个更改跟踪器,可以跟踪您的所有更改。您对上下文中的对象所做的每个更改都将由该上下文本地存储,并且当您调用 时,所有更改都将立即提交DataContext.SaveChanges();
因此,在这种情况下,如果您随后调用InsertObject1、thenInsertObject2InsertObject3、then DataContext.SaveChanges();,所有内容都将一次性存储。

如果您的意思是如何在 SQL 数据库事务中完成所有这些操作,您可以在此处阅读有关如何使用这些内容的信息: http: //msdn.microsoft.com/en-us/data/dn456843