我的 EF4 模型中有一个抽象的内容实体,它带有一个具体的子类 MultipleChoiceItem。在 MultipleChoiceItem 的情况下,有一个相关的表,该表由 MultipleChoiceItem 实体上的 Navigation 属性访问,称为 Options。我想预先加载选项结果,因为如果你得到一个 MultipleChoiceItem,你总是想要选项。但是,我似乎无法让它发挥作用。这是我基本完成的:
MultipleChoiceItem 是一个子类,因此默认情况下它没有创建元数据。所以,我为它创建了一个元数据类,看起来像这样:
[MetadataTypeAttribute(typeof(MultipleChoiceItem.ContentMetadata))] public partial class MultipleChoiceItem { internal sealed class MultipleChoiceItemMetadata { ... other stuff ... [Include] public EntityCollection<McOption> Options { get; set; } ... other stuff ... }
然后,我在 ContentService 中创建了一个新查询,如下所示:
public IQueryable<Content> GetMultipleChoiceItems() { return this.ObjectContext.Contents.OfType<MultipleChoiceItem>() .Include("Options"); }
在单元测试中,我这样称呼它:
context = new ContentContext();
var loadOperation = context.Load(context.GetMultipleChoiceItemsQuery());
loadOperation.Completed += new EventHandler(CompletedHandler);
一旦我进入 CompletedHandler,下面的代码似乎没有加载 Options 属性——事实上,当它应该是 4 时,Options.Count == 0(通过检查底层数据存储来验证)。
MultipleChoiceItem mci = context.Contents.First(c => c.ContentId == mciId) as MultipleChoiceItem;
谁能告诉我我做错了什么?我试图按照我看过的模型发布,但显然遗漏了一些东西......
谢谢!