Domanda

Ho una tabella dei venditori che eredita da una tabella SalesDocument utilizzando la tabella per tipo di ereditarietà

le classi di tabella (semplificate) sono;

[Table("SalesDocumentHeaders")]
public abstract class SalesDocumentHeader  
{
[ForeignKey("CreatedByUserId")]
public virtual User CreatedBy { get; set; }

[Required]
public int CreatedByUserId { get; set; }

[Required]
public virtual DateTime? DocumentDate { get; set; }

[Required]
public String ReferenceNumber { get; set; }

} 

[Table("SalesOrders")]
public class SalesOrder : SalesDocumentHeader
{
[Required]
public String CustomerOrderNumber { get; set; }

public DateTime? DeliverBy { get; set; }

public virtual SortableBindingList<SalesOrderLine> Lines { get; set; }

}
.

Il contesto contiene

public DbSet<SalesOrder> SalesOrders { get; set; }

public DbSet<SalesDocumentHeader> SalesDocumentHeaders { get; set; }
.

Non ha strettamente bisogno dei suddetti DBSET, poiché il venditore è eredita da SalesDocumentHeader, ma lo trovo conveniente.

Sembra funzionare bene, ma sono preoccupato che ci siano 2 modi per raggiungere lo stesso record, sto facendo qualcosa di sbagliato?

È stato utile?

Soluzione

Di solito è necessario mantenere il DBSET per la tabella di base.Questo aiuta quando si dispone di più tabelle derivate (chiamali A e B) e devi decidere il tipo effettivo dinamicamente.

Ad esempio se si dispone di un'altra entità che i riferimenti a tipo A o B (come un utente può avere diversi tipi di informazioni di contatto), è possibile fare riferimento alla tabella di base e EF risolveranno il tipo di calcestruzzo corretto in fase di esecuzione.Anche se ovviamente questo aggiunge un codice di colata extra.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top