【发布时间】:2012-07-25 02:14:49
【问题描述】:
我无法检测导航属性的变化:
我的测试模型如下所示:
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; }
}
我创建并保存了一个 Person 类型的对象,并分配了 Name 和 Address 属性。我的问题是,如果我从数据库中取回 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(x => x.Address).First(); 加载 Person 对象解决问题。有没有办法避免调用 Include 并继续修改 Address 属性而不是 AddressId ?
【问题讨论】:
-
如果调用 ctx.DetectChanges() 会发生什么?
-
没什么。结果是一样的!!
标签: c# entity-framework-4