1

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

让我解释一下: 在此处输入图像描述

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

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

4

2 回答 2

2

实体框架 (EF) 通过设计来实现这一点。更新外键永远不会更新导航属性。

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

至于哪种方法更好的问题,那要看情况了!
- 更新密钥很简单,这也是我们一直在使用数据传输对象 (DTO) 甚至普通 SQL 所做的事情。所以对于EF新手来说更容易掌握和使用。
- 更新导航属性是您真正获得基于对象的数据模型的地方。代码看起来更干净,更易读。但是,您需要非常小心上下文。根据我对 EF 的一点个人经验,我发现尝试更新导航属性带来的复杂性大于价值,尤其是在上下文隐藏在数据访问层后面的多层架构中。

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

于 2013-05-09T17:52:13.757 回答
0

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

于 2013-05-09T20:39:23.083 回答