实体框架,查找方法将外键留空

Posted

技术标签:

【中文标题】实体框架,查找方法将外键留空【英文标题】:Entity framework, find method leaves foreign key empty 【发布时间】:2015-03-28 07:43:04 【问题描述】:

我有一个名为 PageItem 的实体。 PageItem 有一个名为 Page 的属性。 Page 的类型是 Page 类。

类 PageItem 公共页面页面获取;放; ...

当我这样查询时:

var item = context.PageItems.Find(5);

问题是,item.Page 为空,所以当我保存项目实体框架时会创建一个新的页面记录。

【问题讨论】:

本文描述了问题和可能的解决方案:msdn.microsoft.com/en-us/magazine/dn166926.aspx include 添加一个连接。我不想加入有两个原因。一、性能,二是page之类的很多属性。例如,客户 Cget;设置;, 城市 cty get; set; 所以我必须打很多 Include("...") 电话。 我在上面更新了我的答案。 感谢您的帮助。 【参考方案1】:

我学到的总结:

第一:实体框架Find方法不填充嵌套对象的Id值(数据库语言:外键。但我意识到当你保存该实体时,它不会更新外键列,所以什么都没有。

其次:如果您想读取并使用实体的外键值,您应该为每个引用表定义(int/long 不管)属性一个外键。并用 ForeignKey 属性标记它。此外,如果它可以为 null,则将属性类型设为 int?还是长? (可为空)

示例:

公共类客户 公共 ID 获取;放; [外键(“城市”) 公共诠释? City_Id 获取;放; 公共城市城市得到;放;

此外,如果您想在 City 上加载layz,则必须将其标记为虚拟。

【讨论】:

以上是关于实体框架,查找方法将外键留空的主要内容,如果未能解决你的问题,请参考以下文章

如何使用实体框架将相关实体添加到数据库

实体 Remove() 将外键属性设置为 null

删除实体时休眠将外键设置为空

理解实体框架核心外键关系

实体框架 - 多个字段中的相同外键

如何在实体框架中定义除默认方法之外的外键关系