如何将ICollection <type>映射到扩展类

时间:2015-06-13 16:58:06

标签: c# entity-framework

我创建了一个如下所示的数据模型:

// 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集合的任何想法?

1 个答案:

答案 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>();