2012-08-23 68 views
0

我想找出一種方法來開發一個使用不會更新或刪除的實體框架的數據庫模型。出於分析原因,業務需求需要對系統中每條記錄所做的所有更改的完整歷史記錄。因此,我想通過向數據庫中插入新記錄來進行修改。實體框架:開發一個不會執行更新和刪除的模型

是否有一個乾淨的方式讓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; } 
} 

回答

1

基本上你需要重寫SaveChanges()方法DbContext。在您的方法中,獲取所有具有EntityStateDeletedModified的對象並設置狀態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; 
     } 

    } 

}