实体框架:开发不执行更新和删除的模型

Posted

技术标签:

【中文标题】实体框架:开发不执行更新和删除的模型【英文标题】:Entity Framework: Developing a Model that does not do Updates and Deletes 【发布时间】:2012-08-23 02:54:59 【问题描述】:

我正在尝试找出一种使用不进行更新或删除的实体框架开发数据库模型的方法。出于分析原因,业务需求需要对系统中每条记录所做的所有更改的完整历史记录。因此,我想始终通过向数据库中插入新记录来进行修改。

有没有一种干净的方法可以让实体框架做到这一点?还是我要跳过很多圈才能获得这种行为。基本模型非常简单,删除了一些东西,比如构造函数,因为它们对讨论没有太大影响:

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】:

基本上你需要覆盖DbContext 中的SaveChanges() 方法。在您的方法中获取所有具有EntityState DeletedModified 的对象并设置状态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;
        

  


【讨论】:

以上是关于实体框架:开发不执行更新和删除的模型的主要内容,如果未能解决你的问题,请参考以下文章

JPA JPQL简介

实体框架:更新实体,如果不存在则添加

数据库第一实体框架更新模型不起作用:可能是什么原因?

如何强制实体框架始终从数据库中获取更新数据?

在不使用其他项目的情况下添加实体框架核心迁移

如何使用实体框架执行原始 SQL 查询而无需使用模型?