C# 对刚插入ObjectContext的实体运行代码的可靠方法?

C# 对刚插入ObjectContext的实体运行代码的可靠方法?,c#,entity-framework,objectcontext,C#,Entity Framework,Objectcontext,我有一些代码需要在每次将实体插入数据库时运行,问题是此代码需要实体PrimaryKey。 我发现可以从EntityState.Unchanged的ObjectStateManager中获取实体,这是插入后的对象,但我不确定在ObjectContext中是否始终只有EntityState为“Unchanged”的对象 是否有一种可靠的方法可以仅针对刚刚使用ObjectContext插入的对象运行代码?是的,有一种方法。您必须调用重载的SaveChanges,它在自动保存后不会接受更改,而您将负责调

我有一些代码需要在每次将实体插入数据库时运行,问题是此代码需要实体PrimaryKey。
我发现可以从EntityState.Unchanged的ObjectStateManager中获取实体,这是插入后的对象,但我不确定在ObjectContext中是否始终只有EntityState为“Unchanged”的对象


是否有一种可靠的方法可以仅针对刚刚使用ObjectContext插入的对象运行代码?

是的,有一种方法。您必须调用重载的
SaveChanges
,它在自动保存后不会接受更改,而您将负责调用
AcceptAllChanges
。在此场景中,在调用
SaveChanges
(但只有在调用
AcceptAllChanges
)之后,对象才会处于添加状态。通用代码应该如下所示:

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

    // Run your code here

    context.AcceptAllChanges();
    scope.Complete();
}
事务作用域不是必需的-如果必须在带有插入的事务中运行post insert代码,则这只是一个示例


您还可以将该代码包装到覆盖的
SaveChanges
中,以便将其放在集中的位置。

是的,有一种方法。您必须调用重载的
SaveChanges
,它在自动保存后不会接受更改,而您将负责调用
AcceptAllChanges
。在此场景中,在调用
SaveChanges
(但只有在调用
AcceptAllChanges
)之后,对象才会处于添加状态。通用代码应该如下所示:

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

    // Run your code here

    context.AcceptAllChanges();
    scope.Complete();
}
事务作用域不是必需的-如果必须在带有插入的事务中运行post insert代码,则这只是一个示例

您还可以将该代码包装到覆盖的
SaveChanges
中,以便将其放在集中的位置