C# 实体框架:将字段更新为空值?
我正在使用存根更新实体,当更新的实体由值从非null变为null的列组成时,null不会持久化到数据库,即记录继续保存以前的非null值 我做错了什么C# 实体框架:将字段更新为空值?,c#,entity-framework,C#,Entity Framework,我正在使用存根更新实体,当更新的实体由值从非null变为null的列组成时,null不会持久化到数据库,即记录继续保存以前的非null值 我做错了什么 public void UpdateEntity(Entity e) { _context.Works.Attach(new Entity{ Id = e.Id }); _context.ApplyCurrentValues("Entities", e); _
public void UpdateEntity(Entity e)
{
_context.Works.Attach(new Entity{ Id = e.Id });
_context.ApplyCurrentValues("Entities", e);
_context.SaveChanges();
}
问题是,您需要在
Attach()
之后,而不是之前,为这些属性分配null
。也许ApplyCurrentValues()
只复制不相同的属性?(我从未进行过测试,但如果进行了测试,这将是合理的。)尽量避免使用“附加”加载实体。如果您只是从DB获取实体,则不必为空项上的设置标志费心:
var stage = Db.Stages.First(s => s.ID == someId);
stage.Notation = vm.Notation; // can be also null
Db.SaveChanges();
取决于你的关系是什么,如果你有一个关系,你需要确保它是0..1,而不是1对多。我试图为空的值是简单的数据库列(即date/integer/varchar);虽然还有其他实体与该实体有1…多个关系,但它们没有被任何方式修改。谢谢Craig,我认为这确实可能是问题所在。在触发ApplyCurrentValues()之前,我无法附加实体,因为它会破坏我的存储库模式。为了解决这个问题,我被迫检索实体,并手动让更新的分离实体的值在调用SaveChanges()之前更新检索到的附加实体的值。如果有办法避免检索实体,我会洗耳恭听。应该将整个对象标记为已修改。