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