Таблица с различными полями в зависимости от категории - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть таблица с этими столбцами:

Id
Title
Description
CreateDateTime
CategoryId
Picture
quantity
Price
RentPrice
WantToExchange
NumberOfRoom
DepositPrice

Для каждой строки требуются только первые 6, а другой столбец будет нулевым в зависимости от категории объекта.

Например, в cat1 только первые 6 полей и Price заполнены пользователем, а в cat2 заполнены только первые 6 полей и RentPrice, DepositPrice, поэтому через некоторое время многие столбцы строк таблицы становятся пустыми

Я вижукакое-то решение в исходном коде NopCommerce, которое используется для хранения различных свойств продукта на разных языках - есть сущность с именем LocalizedProperty и storeEntityId, LanguageId, имя сущности, имя поля и его значение
itиспользуйте

Expression<Func<T, TPropType>>

и PropertyInfo, чтобы получить имя поля, но я ищу более простой способ.Как я могу изменить дизайн моей сущности?

1 Ответ

0 голосов
/ 03 декабря 2018

Если бы вы разработали этот объект ориентированным образом, вам, вероятно, пришлось бы создать класс PictureDescription и класс PicturePrice, которые имели бы другие свойства.

Каждое описание PictureD иметь ноль или один объект PicturePrice: прямое агрегирование

Если вы хотите ноль или один в реляционной базе данных, то это часто делается с использованием двух таблиц с внешним ключом из одной таблицы, указывающимв другую таблицу.

См. Entity Framework ноль или один-к-одному

class PictureDescription
{
    public int Id {get; set;}
    public string Title {get; set;}
    ...

    // every PictureDescription has zero or one PicturePrice
    public virtual PicturePrice PicturePrice {get; set;}
}

class PicturePrice
{
    public int Id {get; set;}
    public decimal Price {get; set;}
    ...

    // every PicturePrice belongs to exactly one Picture, using foreign key
    public int PictureDescriptionId {get; set;}
    public virtual PictureDescription PictureDescription {get; set;}
}

Этого будет достаточно, чтобы Entity Framework обнаружил ваши столбцы иотношения между таблицами.Если вы хотите использовать свободный API, в DbContext.OnModelCreating:

// every PictureDescription has zero or one PicturePrice:
modelBuilder.Entity<PictureDescription>()
    .HasOptional(description => description.PicturePrice)
    .WithRequired(price => price.PictureDescription)
    .HasForeignKey(price => price.PictureDescriptionId);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...