我正在使用实体框架,并且我有一些对所有实体都通用的属性:
CreatedByUserName CreatedDateTime LastModifiedByUserName LastModifiedDatetime
所以目前我正在保存一个新房产,我必须这样:
_db.ProjectApprovals.Add(projectApproval);
projectApproval.CreatedByUserName = "Dev";
projectApproval.CreatedDateTime = DateTime.Now;
_db.SaveChanges();
你可以想象不得不这样做:
projectApproval.CreatedByUserName = "Dev";
projectApproval.CreatedDateTime = DateTime.Now;
对于所有实体,每次保存都是一种痛苦。我想要包装保存然后我可以在那里做。问题是如何知道上下文中的哪些实体已被添加或修改。
答案 0 :(得分:2)
首先,您必须为实现这些属性的所有实体定义共享接口:
public interface IEntity
{
string CreatedByUserName { get; set; }
DateTime CreatedDateTime { get; set; }
...
}
在您的实体中实施此界面,并覆盖派生SaveChanges
中的ObjectContext
方法。
public override int SaveChanges(SaveOptions saveOptions)
{
var entries = this.ObjectStateManager
.GetObjectStateEntries(EntityState.Added | EntityState.Modified)
.Where(x => !x.IsRelationship && x.Entity is IEntity);
foreach (var entry in entiries)
{
var entity = entry.Entity as IEntity;
if (entry.State == EntityState.Added)
{
...
}
else
{
...
}
}
return SaveChagnes(saveOptions);
}