簡體   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