gpt4 book ai didi

C# - EF 6 抽象导航属性

转载 作者:行者123 更新时间:2023-11-30 15:27:27 24 4
gpt4 key购买 nike

我有以下抽象类:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com