我有以下抽象类:
NotaFiscal:
public abstract partial class NotaFiscal
{
public virtual ICollection<NotaFiscalItem> NotaFiscalItens { get; set; }
}
NotaFiscalItem:
public abstract class NotaFiscalItem
{
...
}
具体类将从中生成:
NotaFiscalEntrada:
public class NotaFiscalEntrada : NotaFiscal
{
public int NotaFiscalEntradaId { get; set; }
}
NotaFiscalEntradaItem:
public class NotaFiscalEntradaItem : NotaFiscalItem
{
public int NotaFiscalEntradaItemId { get; set; }
}
问题: 抽象类NotaFiscal中的导航属性是抽象对象的集合,有没有办法在具体类NotaFiscalEntrada中导航到集合中的对象,这将是也很具体 - NotaFiscalEntradaItem?有没有办法告诉在具体类 NotaFiscalEntrada 中,NotaFiscalItem 的 ICollection 将是 NotaFiscalEntradaItem 并且 EF 将理解这一点并导航到它?
我必须这样使用它,因为集合的智能(LINQ 查询、求和...等等)都在抽象类中,而其他类如 NotaFiscalSaida 和 NotaFiscalItemSaida 将从抽象类创建。每一个都将是数据库中的一个表。
我正在使用 Code First、POCO、EF 6.1 和 TPC 映射。
最佳答案
Entity Framework 不支持通用实体,但它支持继承通用类的实体
尝试更改您的抽象 NotaFiscal
类,使其具有通用参数来表示每个 NotaFiscalItem
:
public abstract class NotaFiscal<T> where T : NotaFiscalItem
{
public abstract ICollection<T> NotaFiscalItems { get; set; }
}
然后在你的具体类中:
public class NotaFiscalEntrada : NotaFiscal<NotaFiscalEntradaItem>
{
public int NotaFiscalEntradaId { get; set; }
public override ICollection<NotaFiscalEntradaItem> NotaFiscalItems { get; set; }
}
这样,您的具体 NotaFiscal
类型将能够使用每个类型的 NotaFiscalItems
属性公开其具体的 NotaFiscalItem
集合。
关于C# - EF 6 抽象导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27526999/