简体   繁体   English

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

[英]saving data in multiple tables in one transaction using entity framework

How can I save data into multiple tables in one transaction using entity framework? 如何使用实体框架在一个事务中将数据保存到多个表中?

I have multiple void methods where I populate the context, but I want to save it in one transaction rather than saving it multiple times. 我有多个用于填充上下文的void方法,但是我想将其保存在一个事务中,而不是多次保存。 What is the best way of doing this? 最好的方法是什么?

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

    }
}

Your example code looks fine. 您的示例代码看起来不错。
Entity framework is a change tracker and keeps track of all your changes. 实体框架是变更跟踪器,可跟踪您的所有变更。 Every change you make to an object in your context will be stored by that context locally and all changes will be commited at once when you call DataContext.SaveChanges(); 您对上下文中的对象所做的每次更改都将由该上下文本地存储,并且所有更改将在调用DataContext.SaveChanges();时立即DataContext.SaveChanges(); .
So in this case, if you subsequentially call your InsertObject1 , then InsertObject2 and InsertObject3 , and then DataContext.SaveChanges(); 因此,在这种情况下,如果您随后调用了InsertObject1 ,则依次调用InsertObject2InsertObject3 ,然后调用DataContext.SaveChanges(); InsertObject3 , everything will be stored in one go. ,所有内容都会一口气存储起来。

If you meant how you can do all this in inside an SQL database transaction, you can read about how to use those here: http://msdn.microsoft.com/en-us/data/dn456843 如果您想知道如何在SQL数据库事务中完成所有这些操作,则可以在此处了解如何使用它们: http : //msdn.microsoft.com/zh-cn/data/dn456843

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM