Code First更新字段,没有必填字段

时间:2018-09-12 08:06:26

标签: entity-framework-6 ef-code-first

这是我的实体:

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 :(得分:0)

我使用这样的解决方案:

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