【问题标题】:Can't Get EF4 Eager Loading of Subclassed Entities to Work无法使 EF4 急切加载子类实体工作
【发布时间】:2010-09-03 13:24:05
【问题描述】:

我的 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;

谁能告诉我我做错了什么?我试图按照我看到的模型发布,但显然缺少一些东西......

谢谢!

【问题讨论】:

  • 我没有看到您在哪里使用 GetMultipleChoiceItems?您的最后一个代码 sn-ps 只需访问 Contents 而不使用 Include。
  • 我在上下文中使用它。在那个之前的sn-p中加载。最后一个 sn-p 在 loadOperation 的 Completed 时间发生的事件处理程序中。

标签: .net entity-framework-4 wcf-ria-services eager-loading domainservices


【解决方案1】:

我必须手动执行的元数据的元数据类型属性(因为 RIA 出于某种原因默认不会为子类生成元数据)类型错误。无意中读到:

[MetadataTypeAttribute(typeof(MultipleChoiceItem.ContentMetadata))]

并且应该阅读:

[MetadataTypeAttribute(typeof(MultipleChoiceItem.MultipleChoiceMetadata))] 

没有为子类生成元数据这一事实非常烦人。

无论如何,在这里发布以防其他人有这个问题!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多