针对刚刚插入ObjectContext的实体运行代码的可靠方式

本文关键字:代码 方式 运行 实体 插入 ObjectContext | 更新日期: 2023-09-27 17:58:27

每次将实体插入数据库时,我都需要运行一些代码,问题是这些代码需要实体主键
我发现我可以从具有EntityState的ObjectStateManager中获取实体。Unchanged,这是插入后我的对象,但我不确定这是否总是ObjectContext中唯一将"Unchanged"作为EntityState的对象。

有没有一种可靠的方法可以只针对刚刚插入ObjectContext的对象运行代码?

针对刚刚插入ObjectContext的实体运行代码的可靠方式

是的,有办法。您必须调用重载的SaveChanges,它在自动保存后不会接受更改,而是由您负责调用AcceptAllChanges。在这种情况下,对象在调用SaveChanges之后仍将处于"已添加"状态(但仅在您调用AcceptAllChanges之前)。通用代码应该如下所示:

using (var scope = new TransactionScope(...))
{
    context.SaveChanges(SaveOptions.DetectChangesBeforeSave);
    // Run your code here
    context.AcceptAllChanges();
    scope.Complete();
}

事务范围是不必要的——这只是一个方法的例子,如果您必须在带有插入的事务中运行后插入代码。

您还可以将该代码封装到overriden SaveChanges中,这样您就可以将其集中放置。