如果模型实现特定接口,则在保存/更新期间自定义逻辑

时间:2013-11-25 22:25:47

标签: c# entity-framework

如果我的所有Entity Framework Models都实现了某些接口,我是否可以在Save方法中添加逻辑,这样,如果要保存的Model实现了特定的接口,那么执行一些自定义逻辑?

示例,假设我有一个类似的界面:

public interface IDateUpdated
{
    //DateUpdated
}

所以现在当我保存/更新实体时,如果Model实现了IDateUpdated,那么应该这样做:

someEntity.DateUpdated = DateTime.Now;

这可能吗?

(我正在使用EF 6)

2 个答案:

答案 0 :(得分:2)

您可以覆盖SaveChanges中的DbContext。假设你没有太多的接口,你可以把代码放在那里。

public override int SaveChanges() {
    var changeSet = ChangeTracker.Entries();

    if (changeSet != null) {
        foreach (var entry in changeSet.Where(x => x.State != System.Data.Entity.EntityState.Unchanged)) {
            // Implements interface?
            if (entry.Entity is IDateUpdated) {
                ((IDateUpdated)entry.Entity).DateUpdated = DateTime.Now;
            }
        }
    }

    return base.SaveChanges();
}

答案 1 :(得分:0)

在保存实体之前,您可以在执行自定义逻辑之前检查它是否实现了接口。

if (someEntity is IDateUpdated)
{
    someEntity.DateUpdated = DateTime.Now;
}