¿Está bien declarar un DBSET en el contexto tanto para una tabla base como para una mesa derivada?

StackOverflow https://stackoverflow.com//questions/20014559

Pregunta

Tengo una tabla de Salesorder que hereda de una tabla de SalesDocument usando Tabla por tipo Herencia

Las clases de tabla (simplificadas) son;

[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; }

}

El contexto contiene

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

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

No necesita estrictamente los Salesorders DBSET, ya que Salesorder hereda de SalesDocumentHeader, sin embargo, me parece conveniente.

Parece que funciona bien, pero me preocupa que haya 2 formas de alcanzar el mismo registro, ¿estoy haciendo algo mal?

¿Fue útil?

Solución

Por lo general, solo necesita mantener el DBSET para la tabla base.Esto ayuda cuando tiene múltiples tablas derivadas (llame a A y B) y necesita decidir el tipo real dinámicamente.

Por ejemplo, si tiene otra entidad que las referencias tipo A o B (como un usuario pueden tener diferentes tipos de información de contacto), puede hacer referencia a la tabla base y la EF resolverá el tipo de concreto correcto en tiempo de ejecución.Aunque, por supuesto, esto agrega un código de fundición adicional.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top