我无法检测导航属性的更改:
我的测试模型如下所示:
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),则 ef 不会检测到更改!我的代码是这样的:
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 ?