【发布时间】:2015-06-25 08:16:14
【问题描述】:
我需要在我的两个表中插入新行,第一个表的自动生成的 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 个要插入的项目,我当前的代码会影响性能吗
【问题讨论】:
-
您应该将您的交易包装在
using语句中。 -
假设您有 1000 个要插入的项目; 999 成功发生,1000 失败......你想回滚所有这些还是只回滚最后一个失败的 1? (你的代码会这样做)。我怀疑它应该离开 999 成功并且只回滚失败的 1 事务。因此,我猜您实际上希望将您的 foreach 放在两个 using 语句之间。
标签: c# entity-framework-6