我在与检测导航属性的变化麻烦导航属性的变化:实体框架不会检测
我的测试模型是这样的:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public virtual Address Address { get; set; }
}
public class Address
{
public int Id { get; set; }
public string Name { get; set; }
}
我已经创建并保存具有Name和Address属性的Person类型的对象已分配。我的问题是,如果我从数据库中取回Person对象并更改Address属性(例如Null),那么e.f.没有检测到变化! 我的代码是这样的:
using (var ctx = new EFContext())
{
Person p = ctx.People.First();
//p.Address IS NOT NULL!
p.Address = null;
var entry = ctx.Entry(p);
}
为什么entry.State
不变?
编辑:如果我调用SaveChanges,记录被正确保存(地址变为空)!
编辑2:我创建了外键属性作为比利建议,如果我检查在Visual Studio中的Person对象的状态被修改..如果我不与调试器停止检查对象的值状态不变!
编辑3:使用ctx.People.Include加载Person对象(x => x.Address).First();解决了这个问题。有没有办法避免调用Include并继续修改Address属性而不是AddressId?
如果您调用ctx.DetectChanges(),会发生什么? – Maarten 2012-07-26 13:30:41
什么都没有。结果是一样的!! – Mones 2012-07-26 13:31:22