我有一个抽象的内容实体在我的EF4模型中具有一个具体的子类MultipleChoiceItem。在MultipleChoiceItem的情况下有一个相关的表,由名为Options的MultipleChoiceItem实体的Navigation属性访问。我想急于加载选项结果,因为如果你得到一个MultipleChoiceItem,你总是需要选项。但是,我似乎无法得到这个工作。这是我已经完成的基础:无法获得EF4急切加载子类实体的工作
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,下面的代码不会eem加载Options属性 - 事实上,Options.Count == 0应该是4(通过检查底层数据存储来验证)。
MultipleChoiceItem mci = context.Contents.First(c => c.ContentId == mciId) as MultipleChoiceItem;
谁能告诉我我做错了什么?我试图按照我见过的车型发布,显然是错过了一些东西......
谢谢!
我没有看到你在哪里使用GetMultipleChoiceItems?您最后的代码片段只需访问内容而不使用“包含”。 – 2010-09-03 15:01:03
我在上下文中使用它。在该代码之前的代码片段中加载。最后一个片段位于loadOperation完成时发生的事件处理程序中。 – 2010-09-03 15:54:20