Код Сначала обновите поля без обязательного поля - PullRequest
0 голосов
/ 12 сентября 2018

это моя сущность:

public partial class Student
{
   public string Code { get; set; }
   public int Year { get; set; }
   public string Name { get; set; }
   public string Gender { get; set; }
}

Конфиг:

HasKey(e => new { e.Code, e.Year});

Property(b => b.Code).HasColumnName("CODE").IsUnicode(false).HasMaxLength(20).IsRequired();
Property(b => b.Year).HasColumnName("YEAR").IsRequired();
Property(b => b.Name).HasColumnName("NAME").IsUnicode(false).HasMaxLength(50);
Property(b => b.Gender).HasColumnName("GENDER").IsUnicode(false).HasMaxLength(2).IsRequired();

Поле пола также имеет обязательную опцию.В моем обновлении я только хочу обновить поле имени:

var student = new Student
{
   Code = "WRK",
   Year = 2018,
   Name = "Test Name"
};

_context.Student.Attach(student);

_context.Entry(student).Property(x => x.Name).IsModified = true;

_context.SaveChanges();

В SaveChanges это дает исключение DbEntityValidationException, говоря, что поле пола обязательно.Хотя я не хочу его обновлять, но сохраняю существующее значение из базы данных.

Существует ли правильное решение без предварительного запроса базы данных, чтобы получить существующее значение для этого пола?

Спасибо.

1 Ответ

0 голосов
/ 25 сентября 2018

Я использую решение, подобное этому:

Public Overrides Function SaveChanges() As Integer
    For Each changedEntity In Me.ChangeTracker.Entries
        Select Case changedEntity.State
            Case EntityState.Modified
                Select Case If(changedEntity.Entity.GetType.Namespace = "System.Data.Entity.DynamicProxies", changedEntity.Entity.GetType.BaseType, changedEntity.Entity.GetType)
                    Case GetType(Student)
                        changedEntity.Property("Gender").IsModified = False
        End Select
    Next
    Return MyBase.SaveChanges()
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...