我创建了一个如下所示的数据模型:
// 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 Frameworks延迟加载时,DataItemGroup.DataItems会填充所有项目,包括我的ExtendedDataItems,但DataItemGroup.ExtendedDataItems始终为空。
我怀疑我错过了某种类型的映射,但我不知道我应该寻找什么。有关如何通过延迟加载使DataItemGroup加载DataItems和ExtendedDataItems集合的任何想法?
答案 0 :(得分: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>();