作为实体框架保存的一部分的附加操作

时间:2012-11-28 18:54:55

标签: c# entity-framework dbcontext

作为DbContext中保存操作的一部分,我需要序列化扩展信息以存储在数据库的二进制字段中。

我编写了以下方法来拦截已添加或修改的所有Client对象,以确保在保存之前进行序列化。我想知道是否有更好的方法可以做到这一点,或者是否会出现这种方法产生的问题。

public int Save()
{
    foreach (Client client in this.Context.Local.Clients)
    {   
        EntityState state = this.Context.Entry(client).State;
        if (state == EntityState.Added || state == EntityState.Modified)
        {
            client.SerializeExtended();
        }   
    }
    return this.Context.SaveChanges();
}

1 个答案:

答案 0 :(得分:2)

覆盖DbContext.SaveChanges方法。

protected override int SaveChanges()
{
     foreach (var entry in ChangeTracker.Entries<Clients())
     {
        var entity = entry.Entity;
        if (entry.State == EntityState.Added || entry.State == EntityState.Modified)
        {
            entry.Entity.SerializeExtended();
        }
     }
     base.SaveChanges();
}