我试图找出一种使用不进行更新或删除的实体框架来开发数据库模型的方法。出于分析原因,业务需求需要对系统中每条记录所做的所有更改的完整历史记录。因此,我希望始终通过在数据库中插入新记录来进行修改。
是否有一种干净的方式让Entity Framework能够做到这一点?或者我是否会通过大量的箍来获得这种行为。基本模型非常简单,一些东西,比如构造函数,被删除,因为它们不会给讨论增加太多内容:
public class Container
{
public Guid Id { get; private set; }
public ICollection<Container> RelatedContainers { get; private set; }
public ICollection<Item> Items { get; private set; }
}
public class Item
{
public Guid Id { get; private set; }
public string Name { get; private set; }
public string Value { get; private set; }
}
答案 0 :(得分:1)
基本上您需要覆盖SaveChanges()
中的DbContext
方法。在您的方法中,获取具有EntityState
Deleted
或Modified
的所有对象,并设置状态UnChanged
。
public class YourDbContext:DbContext{
public override int SaveChanges(){
foreach ( var ent in this.ChangeTracker
.Entries()
.Where(p =>p.State == System.Data.EntityState.Deleted
p.State == System.Data.EntityState.Modified))
{
ent.State =System.Data.EntityState.Unchanged;
}
}
}