Ошибка обновления одного свойства объекта с помощью Entity Framework - PullRequest
0 голосов
/ 21 мая 2018

У меня есть следующий объект:

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 голосов
/ 21 мая 2018

Вы можете отключить проверку при сохранении изменений следующим образом (сделайте это перед вызовом SaveChanges):

db.Configuration.ValidateOnSaveEnabled = false;

Тогда это должно работать так, как вы ожидаете (сгенерируйте UPDATE запрос только для Versionколонка).

0 голосов
/ 21 мая 2018

Присвойте значение полю Number.

var doc = new Document() { Id = docId, Version= version, Number = "SomeValue" };
0 голосов
/ 21 мая 2018

Таким образом, при использовании аннотаций данных в классах, которые образуют таблицы в вашей базе данных, они преобразуются в ограничения.Обязательная аннотация переводится в NOT NULL, что означает, что необходимо указать значение.

Удалите обязательную аннотацию, если вы хотите, чтобы поле было пустым или указывало значение.

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

0 голосов
/ 21 мая 2018

Либо удалите атрибут [Required] для свойства Number из класса Document, либо присвойте значение свойству Number при создании экземпляра класса Document

Первый подход:

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" };

Подробнее о обязательный атрибут

...