这是我的实体:
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,表示必填字段为性别。尽管我不想更新它,但保留数据库中的现有值。
是否有一个适当的解决方案,而无需先查询数据库以获取该性别字段的现有值?
谢谢。
答案 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