0

我有一个抽象的内容实体在我的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; 

谁能告诉我我做错了什么?我试图按照我见过的车型发布,显然是错过了一些东西......

谢谢!

+0

我没有看到你在哪里使用GetMultipleChoiceItems?您最后的代码片段只需访问内容而不使用“包含”。 – 2010-09-03 15:01:03

+0

我在上下文中使用它。在该代码之前的代码片段中加载。最后一个片段位于loadOperation完成时发生的事件处理程序中。 – 2010-09-03 15:54:20

回答

0

我必须手动完成元数据的元数据类型属性(因为RIA由于某种原因默认为子类默认元数据)具有错误的类型。它无意中阅读:

[MetadataTypeAttribute(typeof(MultipleChoiceItem.ContentMetadata))] 

,应该有阅读:

[MetadataTypeAttribute(typeof(MultipleChoiceItem.MultipleChoiceMetadata))] 

没有子类生成的元数据事实上是很烦人的。

无论如何,张贴在这里万一有其他人有这个问题!

相关问题