【发布时间】:2013-10-05 03:08:33
【问题描述】:
我有这样一个模型优先的实体框架设计(4.4 版)
当我使用这样的代码加载它时:
PriceSnapshotSummary snapshot = db.PriceSnapshotSummaries.FirstOrDefault(pss => pss.Id == snapshotId);
快照已加载除 DataInfo 之外的所有内容(即 SnapshotPart、Quote、QuoteType)。现在查看 SQL,这似乎是因为 Quote 由于 0..1 关系而对 DataInfo 没有 FK。 但是,我原以为 Quote 上的导航属性“DataInfo”仍会转到数据库中来获取它。
我目前的工作是这样的:
foreach (var quote in snapshot.ComponentQuotes)
{
var dataInfo = db.DataInfoes.FirstOrDefault(di => di.Quote.Id == quote.InstrumentQuote.Id);
quote.InstrumentQuote.DataInfo = dataInfo;
}
有没有更好的方法来实现这一点?我以为 EF 会自动加载引用?
【问题讨论】:
-
试试
PriceSnapshotSummary snapshot = db.PriceSnapshotSummaries.FirstOrDefault(pss => pss.Id == snapshotId).Include("ComponentQuotes.InstrumentQuote.DataInfo");你也能贴出失败的代码吗? -
@NicolásStraubValdivieso 谢谢!做到了。对 synax 的较小修正是 PriceSnapshotSummary snapshot = db.PriceSnapshotSummaries.Include("ComponentQuotes.InstrumentQuote.DataInfo").FirstOrDefault(pss => pss.Id == snapshotId);对于其他感兴趣的人。
-
所以在EF中总是这样,如果不存在FK,它不会默认加载实体?
-
如果你包含使用System.Data.Entity,你可以在
.Include()中使用lambda表达式。 -
很好,不知道。
标签: c# entity-framework ef-model-first