I have an abstract Content entity in my EF4 model with a concrete subclass, MultipleChoiceItem. There is a related table in the case of MultipleChoiceItem accessed by a Navigation property on the MultipleChoiceItem entity called Options. I would like to eager-load the Options result because if you're getting a MultipleChoiceItem, you always want the Options. However, I can't seem to get this to work. Here is what I've bascially done:
The MultipleChoiceItem is a subclass, therefore it didn't get metadata created by default. So, I created a metadata class for it that looks sort of like this:
[MetadataTypeAttribute(typeof(MultipleChoiceItem.ContentMetadata))] public partial class MultipleChoiceItem { internal sealed class MultipleChoiceItemMetadata { ... other stuff ... [Include] public EntityCollection<McOption> Options { get; set; } ... other stuff ... }
I then created a new query in the ContentService that looks like this:
public IQueryable<Content> GetMultipleChoiceItems() { return this.ObjectContext.Contents.OfType<MultipleChoiceItem>() .Include("Options"); }
In a unit test, I'm calling that like this:
context = new ContentContext();
var loadOperation = context.Load(context.GetMultipleChoiceItemsQuery());
loadOperation.Completed += new EventHandler(CompletedHandler);
Once I get into the CompletedHandler, the following code doesn't seem to have the Options property loaded--in fact, Options.Count == 0 when it should be 4 (verified by checking the underlying data store).
MultipleChoiceItem mci = context.Contents.First(c => c.ContentId == mciId) as MultipleChoiceItem;
Can anyone tell me what I'm doing wrong? I've tried to follow the models I've seen posted and am apparently missing something...
Thanks!