【发布时间】:2011-12-19 03:06:23
【问题描述】:
我正在学习 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 属性并且数据已经正确存储在数据库中,为什么我必须访问/加载它?我只想更改现有记录的名称。在此示例中,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; }
}
当然,完全定义的类应该有更多的字段。每次我想修改不相关的值时,我宁愿不必访问每个依赖属性。
有没有办法在不先加载所有相关对象的情况下加载对象、更改字段并保存它?
【问题讨论】:
标签: entity-framework entity-framework-4 ef-code-first