【发布时间】:2015-01-21 13:45:07
【问题描述】:
我有一个包含几个外键属性的表,这些属性从 Identity Provider 2.0 转到 Users 表。
[ForeignKey("IsApprovedBy")]
public ApplicationUser IsApprovedByUser { get; set; }
public string IsApprovedBy { get; set; }
这不是问题本身,虽然我知道规范化它应该可以使我不会 nead 这个外键。
我遇到的问题是,当我获取数据并将其返回到我的前端时,Entity 框架调用数据库 3 次只是为了填写这些 ApplicationUser,而不是在我的调用中执行。
Db.Contractors.Include(x => x.IsApprovedByUser)
为什么他在返回我的值而不是在执行我的查询时调用数据库来获取这个特定的数据(所有其他数据已经加载)?
在此先感谢您。
跟踪捕获:
【问题讨论】:
-
在 EF 中看起来像延迟加载问题。尝试在 DbContext 中禁用延迟加载并再次检查。
-
这似乎确实有效,我现在唯一的问题是我的一些测试使用 Indentity 提供程序的
Users或Roles表失败。这很奇怪,延迟加载它可以工作,没有它就不行。有什么注意事项吗? -
因为默认情况下 Identity 不会获取您的子对象,并且您将在所有从
ApplicationUser挂起的导航属性上获得 NullReferenceExceptions。一般来说,关闭延迟加载会更好——这将避免 EF 对你的疯狂。 -
将此作为答案发布,以便我接受。感谢您的努力!
标签: sql entity-framework asp.net-identity-2