У интернет-магазина, над которым я работаю, есть лицо Заказ , в котором есть участник DeliveryDetails .Цель DeliveryDetails состоит в том, чтобы содержать данные, которые являются специфическими для метода доставки, выбранного пользователем (например, Доставка или Получение из магазина), в то время как некоторые детали являются общими для всех методов (например, Имя, Фамилия, Номер телефона).Я думал о структуре, подобной следующей, используя наследование:
public class Order {
// ....other props...
public DeliveryMethodType DeliveryMethodType { get; set; }
public DeliveryDetailsBase DeliveryDetails { get; set; }
}
public class DeliveryDetailsBase
{
public int Id { get; set; }
public string CustomerId { get; set; }
public Order Order { get; set; }
public int OrderId { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public string PhoneNumber { get; set; }
}
public class DeliveryDetailsShipping : DeliveryDetailsBase
{
public string Street { get; set; }
public string Building { get; set; }
public string Appartment { get; set; }
public string PostalCode { get; set; }
public string City { get; set; }
public string Country { get; set; }
}
public class DeliveryDetailsPickupFromStore : DeliveryDetailsBase
{
public string StoreCode { get; set; }
}
Однако я не могу понять, как заставить DeliveryDetails реквизит быть назначенным различным типам деталей способа доставки в зависимостио том, какой метод выбрал клиент и как его использовать в EntityFramework на ASP.Core.
Обходные пути, которые я уже пробовал:
-> (1).Создание связующего реквизита «суперкласса» для ВСЕХ методов доставки и заполнение в БД только тех, которые необходимы для выбранного метода доставки (выбор с помощью установки enum DeliveryMethodType ). ИТОГ : работает, но с 1 большой и уродливой таблицей с несколькими нулями.
-> (2).В Заказ , создание реквизита DeliveryDetails , который в свою очередь включает DeliveryDetailsPickupFromStoreDATA & DeliveryDetailsShippingDATA . OUTCOME : работает, но с несколькими связанными таблицами и довольно уродливым кодом, проверяет выбранный тип из enum, создает конкретный подкласс для выбранного метода доставки и устанавливает в ноль другие неиспользуемые подклассы.
Подвести итоги: Есть ли более изящный и выполнимый способ организовать это?