NavigationProperty null添加了外键

时间:2013-05-09 17:41:05

标签: c# entity-framework-5 navigation-properties

每当我通过设置ForeignKey-ID将外键实体添加到我以前的实体时,关联的对象为空。

让我解释一下: enter image description here

在上一步中,我将AddressId属性设置为28,并通过调用context.SaveChanges()保存了实体上下文。

现在为什么AddressId被填充,但是Address作为NavigationProperty(应该是Address表的Address对象Address.Id == 28){ {1}}?

2 个答案:

答案 0 :(得分:2)

实体框架(EF)按设计工作。 更新外键永远不会更新导航属性。

但是,更新导航属性将更新密钥。另请注意,在这种情况下,Address实体应来自相同的上下文。如果不是.SaveChanges(),则将Address实体视为新实体,并尝试将其添加到数据库中。

关于哪种方法更好的问题,嗯,这取决于! - 更新密钥非常简单,是我们一直在使用数据传输对象(DTO)甚至纯SQL进行的操作。因此,EF的新手更容易掌握和使用 - 更新导航属性是您真正获得基于对象的数据模型的地方。代码看起来更干净,更易读。但是你需要非常小心Context。在我对EF的个人经验中,我发现尝试更新导航属性带来的复杂性高于价值,尤其是在多层架构中,Context隐藏在数据访问层之后。

在我看来,EF最重要的好处是使用LINQ-to-Entities进行查询操作。我有查询和强类型的编译时语法检查。我可以轻松地创建一个基于对象的结果集,其中包含多个级别的子级,数据绑定就绪,无需任何其他代码。我很少再写SQL了。

答案 1 :(得分:0)

我通过重新创建我的实体然后重新加载来解决 这个问题。这似乎工作并重新获取n:m关系导航属性。怪异。