如何将 ICollection 映射到扩展类

本文关键字:映射 扩展 Type ICollection | 更新日期: 2023-09-27 17:56:06

我创建了一个看起来像这样的数据模型:

// 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; }
}

我的问题是,当我使用实体框架延迟加载时,DataItemGroup.DataItems 填充了所有项目,包括我的扩展数据项目,但 DataItemGroup.ExtendedDataItems 始终为空。

怀疑我错过了某种映射,但我不知道我应该寻找什么。关于如何让 DataItemGroup 通过延迟加载来加载 DataItems 和 ExtendedDataItems 集合的任何想法?

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

您可以使用基类 ( 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>();