如果我遗漏了明显的东西,请道歉!但我希望Entity Framework能够在所有Add / Update操作上执行泛型方法。
我正在构建一个自定义SaveHistory
功能,它将T
作为一个param,它实际上是正在处理的Entity Framework对象。
核心方法:
//TODO - Requires additional logic
public void SaveHistory<T>(T type, [CallerFilePath]string callerFilePath = "")
{
//Caller File Path just returns the location of where the method was executed
//This enables us to retrieve the module location
//Get the Name of the class(Type that's been passed in)
var className = typeof(T).Name;
//Get a collection of module names
var enumNames = Enum.GetNames(typeof (Department));
//Does any of the module names equal the executing assembly
if (enumNames.Any(callerFilePath.Contains))
{
//Now I can search the string to see if an action came from a module
}
else
{
//If not it could be an error or calling from a core object
//Needs work
}
}
我想问题是,我可以集中上述方法来触发所有添加/更新/删除操作吗?
如果无法做到这一点,有人会建议更好的解决方案吗?
答案 0 :(得分:1)
您可以使用ChangeTracker
DbContext
属性访问正在保存的实体
在您的实施中覆盖SaveChanges
:
public override int SaveChanges()
{
foreach (var e in ChangeTracker.Entries())
{
SaveHistory(e.Entity);
}
return base.SaveChanges();
}
如果您想在保存之前验证实体,那么您也可以通过overriding ValidateEntity
答案 1 :(得分:0)
是的,您只需要覆盖dbContext类中实体框架的默认SaveChanges方法,然后执行您想要执行的操作。无论何时拨打Context.SaveChanges()
,您的覆盖方法都会调用,
类似这样的事情
public override int SaveChanges() {
// do your changes here
return base.SaveChanges();
}