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

时间:2014-03-03 18:35:50

标签: 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);
        }

    }
}

1 个答案:

答案 0 :(得分:4)

您的示例代码看起来很好 实体框架是一个更改跟踪器,可跟踪所有更改。您在上下文中对对象所做的每个更改都将由本地上下文存储,当您调用DataContext.SaveChanges();时,所有更改都将立即提交。
因此,在这种情况下,如果您按顺序调用InsertObject1,然后InsertObject2InsertObject3,然后DataContext.SaveChanges();,则所有内容都将一次性存储。

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