有没有办法检测某个实体何时被添加到Entity Framework 6中的数据库?

时间:2016-05-13 12:29:54

标签: c# entity-framework

假设我有一个名为X的实体。只要在我的代码的任何部分(X)中将新的db.Xs.Add(new_X_instance);条目添加到数据库中,我想执行特定的sql查询使用实体框架。我想知道这是否可行。只是为了让您知道,我无法使用SQL Server触发器。

2 个答案:

答案 0 :(得分:8)

您可以在SaveChanges()课程中覆盖DbContext方法,在那里您可以获得新添加的实体列表。

public override int SaveChanges()
{
    var AddedEntities = ChangeTracker.Entries<Entity>().Where(E => E.State == EntityState.Added).ToList();

    AddedEntities.ForEach(E => 
    {
        // Do whatever you like !
    });

    return base.SaveChanges();
}

答案 1 :(得分:1)

您可以使用ObjectContext执行此操作,如下所示:

var octx = ((IObjectContextAdapter)ctx).ObjectContext; // ctx is regular DbContext here
octx.ObjectStateManager.ObjectStateManagerChanged += (sender, item) =>
   {
       if (item.Action == CollectionChangeAction.Add) {
           // added
           var target = item.Element; // this is added entity
       }
   };

在您执行Add之后立即调用此名称。请记住,在这些实体保存到数据库之前执行任何sql 通常不是一个好主意。