Это нормально, чтобы объявить DBSET в контексте как для базовой таблицы, так и для производной таблицы?

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

Вопрос

У меня есть таблица продавца, которая наследует от таблицы продаж, используя таблицу на наследство таблицы в виде типа

(упрощенные) классы таблицы являются;

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

}
.

Контекст содержит

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

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

Это не нужно строго нужны Saledorders dbset, поскольку Saliedorder наследует от SaleDocumenteDer, однако я нахожу это удобным.

Кажется, работает хорошо, но я беспокоюсь, что есть 2 способа достижения того же записи, я делаю что-то не так?

Это было полезно?

Решение

Обычно вам нужно только держать dbset для базовой таблицы.Это помогает, когда у вас есть несколько полученных таблиц (вызовите их A и B), и вам нужно динамически определить фактический тип.

Например, если у вас есть другой объект, на который ссылки типа A или B (например, пользователь могут иметь разные типы контактной информации), вы можете ссылаться на базовую таблицу, а EF будет разрешать правильный тип бетона во время выполнения.Хотя, конечно, это добавляет некоторый дополнительный катункий код.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top