У меня есть структура БД с 2 таблицами: Order и Lines. У заказа может быть несколько строк.
Из соображений производительности я хочу иметь отдельную бизнес-модель для моих линий, чтобы иметь возможность управлять объектами освещения (Шаблон TPH):
public class Order
{
public int id { get; set; }
public ICollection<BasicLine> Lines { get; set; }
}
public abstract class BasicLine
{
public int id { get; set; }
public int idOrder { get; set; }
}
public class LineFull: BasicLine
{
public string property1 { get; set; }
public string property2 { get; set; }
public string property3 { get; set; }
public string property4 { get; set; }
}
public class LineLight: BasicLine
{
public string property4 { get; set; }
}
И конфигурация модели:
public class BasicLineModelConfiguration : BaseEntityModelConfiguration<BasicLine>
{
public BasicLineModelConfiguration()
{
var discriminator = nameof(BasicLine.LineType);
Map<LineLight>(c => c.Requires(discriminator).HasValue((int)BasicLine.LineType.LineLight));
Map<LineFull>(c => c.Requires(discriminator).HasValue((int)BasicLine.LineType.LineFull));
ToTable("tbl_Line");
}
}
public class LineFullModelConfiguration : BaseEntityModelConfiguration<LineFull>
{
public LineFullModelConfiguration()
{
}
}
public class LineLightModelConfiguration : BaseEntityModelConfiguration<LineLight>
{
public LineLightModelConfiguration()
{
}
}
public class OrderModelConfiguration : BaseEntityModelConfiguration<Order>
{
public OrderModelConfiguration()
{
ToTable("Order");
HasMany(m => m.Lines)
.WithRequired(m => m.Order)
.HasForeignKey(m => m.idOrder);
}
}
Я также добавил 4 из них в контекст.
Мне нужно, чтобы мой Заказ имеет несколько полных строк со всеми доступными свойствами. Я не думаю, что создание Icollection BasicLines достигнет моей цели, потому что я не могу получить доступ к свойствам LineFull. Но если я установил ICollection LineFull, у меня будет эта ошибка:
Компонент внешнего ключа 'idOrder' не является объявленным свойством для типа 'LineFull'. Убедитесь, что он не был явно исключен из модели и является допустимым примитивным свойством
Я не хочу, чтобы мой LineLight имел полный объект Order в ссылке (я хочу, чтобы он был очень легким)
Я думаю, что у меня проблема с моей структурой, но я много чего перепробовал, но ничего не получалось. (Меня не удивляет вопрос о дискриминаторе, должен ли он быть полем в БД или нет)
спасибо за вашу помощь.