EF4 - 在事务中提取标识并执行后续的SaveChanges()。分离或多个上下文?

时间:2011-10-26 17:36:40

标签: c# entity-framework-4

(注意:我看到this,但这不是我想要做的。)

我有一个要求,我需要做以下事情:

  1. 创建新的Foo实体
  2. 创建Foo实体后,创建一个新的FooAudit实体,并使用文本描述中新Foo实体的新标识值。 FooAudit与Foo无关,因此必须手动从Foo的创建中提取身份。
  3. 如果我不提交交易,请在全有或全无的交易中执行这些操作,保留EntityState记录FooAdded)。
  4. 我是否使用其他类似的上下文?

    using (var fooContext = GetContext())
    {
    
        fooContext.Foos.AddObject(new Foo());
    
        using (var transaction = new TransactionScope())
        {
    
            // Save Foo, while maintaining the Changed EntityState until AcceptAllChanges
            fooContext.SaveChanges(SaveOptions.DetectChangesBeforeSave);
    
            using (var auditContext = GetContext())
            {
                // Save FooAudit, maintaining the Changed EntityState until AcceptAllChanges
                auditContext.FooAudits.AddObject(new FooAudit());
                auditContext.SaveChanges(SaveOptions.DetectChangesBeforeSave);
                transaction.Complete();
                fooContext.AcceptAllChanges();
                auditContext.AcceptAllChanges();
            }
        }
    }
    

    或者有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我通过使用另一个上下文来解决这个问题。