Это нормально, чтобы объявить DBSET в контексте как для базовой таблицы, так и для производной таблицы?
-
21-12-2019 - |
Вопрос
У меня есть таблица продавца, которая наследует от таблицы продаж, используя таблицу на наследство таблицы в виде типа
(упрощенные) классы таблицы являются;
[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 будет разрешать правильный тип бетона во время выполнения.Хотя, конечно, это добавляет некоторый дополнительный катункий код.