2015-06-13 2 views
1

Я создал модель данных, которая выглядит следующим образом:Как отобразить ICollection <Type> к расширению класса

// Base data item class 
public class DataItem 
{ 
    [Key] 
    public int ID { get; set; } 
    public string Name { get; set; }  
    [Required] 
    public int DataItemGroupID { get; set; } 
    public virtual DataItemGroup DataItemGroup { get; set; } 
} 

// Extending data item class 
public class SpecificDataItem : DataItem 
{ 
    public string ExtraField { get; set; }  
} 

// Class for grouping of data items that may be extended or not. 
public class DataItemGroup 
{ 
    [Key] 
    public int ID { get; set; } 
    public string Name { get; set; }  
    public virtual ICollection<DataItem> DataItems { get; set; } 
    public virtual ICollection<ExtendedDataItem> ExtendedDataItems { get; set; } 
} 

Мои вопросы, в том, что, когда я использую Entity структур по отложенной загрузки, DataItemGroup.DataItems заполняется со всеми деталями, включая мои ExtendedDataItems, но DataItemGroup.ExtendedDataItems всегда пуст.

Я подозреваю, что мне не хватает какого-либо изображения, но я не знаю, что мне нужно искать. Любые идеи о том, как заставить DataItemGroup загружать коллекции DataItems и ExtendedDataItems с помощью ленивой загрузки?

ответ

1

Вы можете создать только одну связь, используя базовый класс (DataItem):

public class DataItemGroup 
{ 
    [Key] 
    public int ID { get; set; } 
    public string Name { get; set; }  
    public virtual ICollection<DataItem> DataItems { get; set; } 
} 

Когда вам нужно отфильтровать элементы для определенного типа, которые наследуют от DataItem, вы могли бы использовать OfType<T> метод, например:

var dItemGroup= dc.DataItemGroups.FirstOrDefault(); 
var extendedDataItems=dItemGroup.DataItems.OfType<ExtendedDataItem>(); 
+0

Это хорошо работает. Я добавил свойство public IEnumerable ExtendedDataItems {get {return Equipment.OfType (); }} как ярлык. :) –

Смежные вопросы