使用Entity Framework更新实体的单个属性时出错

时间:2018-05-21 09:27:18

标签: c# entity-framework dbcontext

我有以下实体:

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 个答案:

答案 0 :(得分:2)

您可以在保存此类更改时禁用验证(在调用SaveChanges之前执行此操作):

db.Configuration.ValidateOnSaveEnabled = false;

然后它应该按预期工作(仅UPDATE列生成Version查询。

答案 1 :(得分:0)

从Document类中删除{Property}属性的[Required]属性,或者在创建Document类的实例时将值赋给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
}

如果您无法从模型中删除[Required],请为Number指定一些值

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

有关required attribute

的更多信息

答案 2 :(得分:0)

为Number字段指定一个值。

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

答案 3 :(得分:0)

因此,当在数据库中构成表的类上使用数据注释时,它们将被转换为约束。 Required注释转换为NOT NULL意味着必须提供值。

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

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