我有以下实体:
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
}
}
但是当我运行该方法时,我得到以下错误:
数字字段是必需的。
有没有办法绕过这个验证?
答案 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" };
的更多信息
答案 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