繁体   English   中英

C# - EF 6抽象导航属性

[英]C# - EF 6 Abstract Navigation Property

我有以下抽象类:

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查询,总和......等等)都在抽象类中,而其他类如NotaFiscalSaidaNotaFiscalItemSaida将从抽象类创建。 每一个都是数据库中的一个表。

我正在使用Code First,POCO,EF 6.1和TPC映射。

实体框架不支持通用实体,但它确实支持继承泛型类的实体

尝试将您的抽象NotaFiscal类更改为具有表示每个NotaFiscalItem的泛型参数:

public abstract class NotaFiscal<T> where T : NotaFiscalItem
{
    public abstract ICollection<T> NotaFiscalItems { get; set; }
}

然后在你的具体classe:

public class NotaFiscalEntrada : NotaFiscal<NotaFiscalEntradaItem>
{
    public int NotaFiscalEntradaId { get; set; }

    public override ICollection<NotaFiscalEntradaItem> NotaFiscalItems { get; set; }
}

这样,您的具体NotaFiscal类型将能够使用每个类型的NotaFiscalItems属性公开其具体的NotaFiscalItem集合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM