如果我的所有Entity Framework Models都实现了某些接口,我是否可以在Save方法中添加逻辑,这样,如果要保存的Model实现了特定的接口,那么执行一些自定义逻辑?
示例,假设我有一个类似的界面:
public interface IDateUpdated
{
//DateUpdated
}
所以现在当我保存/更新实体时,如果Model实现了IDateUpdated,那么应该这样做:
someEntity.DateUpdated = DateTime.Now;
这可能吗?
(我正在使用EF 6)
答案 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;
}