我们正在使用Net Core 2与Entity Framework。我们的Sql数据库由许多表组成,包括Address、Account、Customer、Sales等。
有些表有相应的历史表:AddressHistory、CustomerHistory等。
每当有人更改原始表中的内容时,应更新相应的历史表。(不能使用sql时间表,因为我们有自定义历史逻辑)
我们正在尝试应用接口,但在代码上卡住了,可以有人提供一个快速的代码示例来实现这个接口吗?特别是在SaveHistory部分,如何应用依赖注入?请随意重写代码。
public partial class TestDbContext
{
public void AddEntityHistory<IEntityHistory>(IEntityHistory entity) where IEntityHistory: Address
{
// do something 1 etc
}
public void AddEntityHistory<IEntityHistory>(IEntityHistory entity) where IEntityHistory: Customer
{
// do something 2 etc
}
public override int SaveChanges()
{
SaveEntityHistory();
return base.SaveChanges();
}
protected void SaveEntityHistory()
{
var modifiedEntities = ChangeTracker.Entries<IEntityHistory>().Where(e => e.State == EntityState.Added || e.State == EntityState.Modified);
foreach(var entity in modifiedEntities)
{
AddEntityHistory(entity); // what is the code base here? giving error below, it should call appropriate AddEntityHistory Method for corresponding Entity
}
}
}
上方错误:
错误 CS0311:类型“Interfaces.IEntityHistory”无法用作通用类型或方法“PropertyContext.AddEntityHistory(IEntityHistory)”中的类型参数“IEntityHistory”。从“Interfaces.IEntityHistory”到“Data.Entities.Address”没有隐式的引用转换。
资源:
尝试使用类似的代码库:用于CreateDate,UserId等
https://dotnetcore.gaprogman.com/2017/01/26/entity-framework-core-shadow-properties/
AddEntityHistory
,并在SaveEntityHistory
中根据类型调用它是怎么样的? 在AddEntityHistory
中,你将拥有所有类型(你需要的)的逻辑,或者将它们分开成私有方法。 - sharp