代码之家  ›  专栏  ›  技术社区  ›  Masoud

使用实体框架更新实体的单个属性时出错

  •  1
  • Masoud  · 技术社区  · 6 年前

    我有以下实体:

    public class Document
    {
       public int Id { get; set; }
       [Required]
       public string Number { get; set; }
       public int Version { get; set; }
       //other properties with [Required]
    }
    

    我写了一个更新方法 只有 Version 其中之一 Document :

    public void SetDocumentVersion(int docId, int version)
    {
       var doc = new Document() { Id = docId, Version= version };
       using (var db = new MyEfContextName())
       {
         db.Documents.Attach(doc);
         db.Entry(doc).Property(x => x.Version).IsModified = true;
         db.SaveChanges();   //<--- get error
    }
    

    }

    但当我运行该方法时,会出现以下错误:

    数字字段是必需的。

    有什么方法可以绕过这个验证吗?

    4 回复  |  直到 6 年前
        1
  •  2
  •   Evk    6 年前

    您可以在保存这样的更改时禁用验证(在调用 SaveChanges ):

    db.Configuration.ValidateOnSaveEnabled = false;
    

    然后它应该像您期望的那样工作(生成 UPDATE 查询 Version 列)。

        2
  •  0
  •   user1710989    6 年前

    为数字字段赋值。

    var doc = new Document() { Id = docId, Version= version, Number = "SomeValue" };
    
        3
  •  0
  •   garty    6 年前

    因此,当在构成数据库中的表的类上使用数据注释时,它们被转换为约束。所需的批注转换为非空,表示必须提供值。

    如果希望字段可以为空或提供值,请删除所需的注释。

    https://msdn.microsoft.com/en-us/library/jj591583(v=vs.113).aspx

        4
  •  0
  •   Prasad Telkikar    6 年前

    要么删除 [Required] 文档类的“属性到数字”属性或将值赋给 Number 创建文档类实例时的属性

    第一种方法:

    public class Document
    {
       public int Id { get; set; }
       //[Required] /*Remove this attribute*/
       public string Number { get; set; }
       public int Version { get; set; }
       //other properties
    }
    

    如果你不能移除 [必需] 从模型中,然后给数字赋值

    var doc = new Document() { Id = docId, Version= version, Number = "NotNullStringValue" };
    

    更多关于 required attribute