2011-06-07 36 views
1

我有一些代码需要运行每次一个实体插入到我的数据库,问题是这个代码需要实体PrimaryKey。
我发现我可以通过EntityState.Unchanged从ObjectStateManager获取实体,并且这是插入后的对象,但我不确定这是否始终是ObjectContext中唯一具有“Unchanged”作为其EntityState的对象。运行代码针对实体插入ObjectContext的可靠方法?

是否有一种可靠的方式来运行代码只针对已被插入ObjectContext的对象?

回答

1

是的,有一种方法。您必须致电超过SaveChanges,这将不会在自动保存后接受更改,而是您将负责呼叫AcceptAllChanges。在这种情况下,对象在调用SaveChanges后仍然处于Added状态(但直到您拨打AcceptAllChanges)。一般的代码应该是这样的:

using (var scope = new TransactionScope(...)) 
{ 
    context.SaveChanges(SaveOptions.DetectChangesBeforeSave); 

    // Run your code here 

    context.AcceptAllChanges(); 
    scope.Complete(); 
} 

交易范围是没有必要的 - 它是方法只是举例来说,如果你发布插入代码必须与插入的事务中运行。

您也可以将该代码封装到覆盖SaveChanges中,以便在集中的位置使用该代码。

相关问题