我正在学习EF Code First,在更新现有记录时遇到问题。我煮下来到这个简单的例子:在保存现有对象之前,是否必须访问所有关联的对象(延迟加载)?
这工作:
using(var db = new DataContext()){
var p = db.People.Find(1);
p.Name="New Name";
Console.WriteLine(p.Gender.Name); //<--Unnecessary property access
db.SaveChanges(); //Success
}
...但失败(当的WriteLine被删除):
using(var db = new DataContext()){
var p = db.People.Find(1);
p.Name="New Name";
db.SaveChanges(); //DbValidationError "Gender field is required."
}
为什么我如果我不使用它并且数据已经正确存储在数据库中,那么访问/加载Gender propery?我只想更改现有记录上的名称。在此示例中,Gender是在People表中存储为Gender_Id的一对多关联。类定义如下:
public class Person
{
[Key]
public int PersonId { get; set; }
[Required, MaxLength(50)]
public string Name { get; set; }
[Required, Column("Gender")]
virtual public GenderCode Gender { get; set; }
}
public class GenderCode
{
[Key]
public int Id { get; set; }
[Required, MaxLength(10)]
public string Name { get; set; }
}
public class DataContext:DbContext
{
public DbSet<Person> People { get; set; }
public DbSet<GenderCode> GenderCodes { get; set; }
}
当然,完全定义的类将有更多的字段。每次我想修改一个不相关的值时,我宁愿不必访问每个依赖属性。
有没有办法加载一个对象,更改一个字段,并保存它,而无需首先加载所有相关的对象?