繁体   English   中英

更新EF6时需要属性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM