c# - Entity Framework 6 事务

标签 c# entity-framework-6

我需要在我的两个表中插入新行,第一个表的自动生成的 id 字段是第二个表的字段之一。目前我正在使用事务来插入数据。我当前的代码如下

        using (var context = new ApplicationDatabaseEntities())
        {
            using (var transaction = context.Database.BeginTransaction())
            {
                try
                {
                   foreach (var item in itemList)
                   {
                    context.MyFirstEntity.Add(item);
                    context.SaveChanges();

                    mySecondEntity.MyFirstEntityId = item.Id;
                    context.MySecondEntity.Add(mySecondEntity.MyFirstEntityId );
                    context.SaveChanges();

                   }
                  transaction.Commit();
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    Console.WriteLine(ex);

                }
            }
        }

上面的代码工作正常。我的问题是,这是正确的方法吗?我的意思是,如果我要插入 1000 或 2000 个项目,我当前的代码是否会影响性能

最佳答案

可以使用隐式事务改进代码:

foreach (var item in itemList)
{
    context.MyFirstEntity.Add(item);
    mySecondEntity.MyFirstEntity = item;
    context.MySecondEntity.Add(mySecondEntity);
}
context.SaveChanges();

注意:我使用了导航属性而不是 id。

关于c# - Entity Framework 6 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31044801/

相关文章:

c# - 如何在 orderby 子句中使用带有动态参数的 LINQ

c# - EntityFramework Stored Proc Function Import 是否可以异步读取?

c# - Xamarin - 显示表

c# - 服务崩溃,事件名称 [CLR20r3]

c# - 查找使用 c# 启动的新进程

sql-server - SQL Server 2008 的 EntityFramework(使用 LINQ)中基于偏移/获取的分页(实现)

c# - Database.BeginTransaction 与 Transactions.TransactionScope

c# - 这是 TransactionSope 的正确用法吗?

c# - 从字符串创建开放构造类型

visual-studio-2013 - SSDT 和 Entity Framework