[英]Property Is Required on Update EF6
我拥有实体所必需的属性。 将实体添加到数据库后,该属性由系统填充。 从此以后,永远不要更改此属性。 此属性也永远不会传递给客户端。
因此,现在当用户编辑该实体并将其传递到我的服务层时,该属性为null。 是否可以告诉EF该属性不应被修改且永远不要更新,或者是我唯一的选择,是在调用SaveChangesAsync之前从数据库中检索值并用相同的值填充已编辑的实体?
这是我的实体的一个例子
public myEntity() {
public long Id { get; set; }
public string Name { get; set; }
public string SystemProperty { get; set; }
}
仅将属性Id和Name传递给客户端。 当AddAsync在我的服务中调用时,我自己填充SystemProperty。
这是我的UpdateAsync,这使DbContext抛出异常
需要系统属性
public override Task<int> UpdateAsync(Module updated)
{
_context.Modules.Attach(updated);
// do not update
_context.SetModified(updated, "SystemProperty", false);
return _context.SaveChangesAsync();
}
我已经针对我的DbContext创建了SetModified方法,因此我可以对方法进行单元测试。
public void SetModified(object entity, string property, bool isModified)
{
this.Entry(entity).Property(property).IsModified = isModified;
}
如您所见,我认为我可以使用IsModified = false,但这似乎并没有忽略该属性。
我有什么选择?
我知道最好的解决方法:
entity.Property = "placeholder";
var entry = _context.Entry(entity);
entry.State = EntryState.Modified;
entry.Property(m => m.Property).IsModified = false;
_context.SaveChanges();
您将实体标记为已修改,然后排除未修改的属性。 至于验证,您只需要为该字段设置有效值即可通过验证。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.