Во время моего проекта, в котором я создаю своего рода интернет-магазин, я столкнулся с проблемой с моим бэкэндом .NET, где я сначала использую Entity Framework Code с Fluent API.
В моем интерфейсе Заказы могут быть сделаны и переданы моему внутреннему интерфейсу, где они в конечном итоге становятся объектами Заказа (код ниже). Этот заказ содержит пользователя и словарь, в котором хранятся товары и их заказанные количества. Моя текущая цель - сохранить эти заказы в моей базе данных для получения истории заказов.
Я понимаю, что сам по себе EF не может отобразить словарь. Будучи студентом и занимаясь главным образом фронтэндом, я не знаю, как с этим справиться.
Я пытался преобразовать этот словарь в список ItemWrappers (содержащий и Item, и сумму) и создать 2 таблицы: Order (OrderId, UserId) и OrderItem (OrderId, ItemId, Amount). Это преобразует «многие ко многим» («Пользователи в элементы», а порядок определяется из атрибута отношения) в «один ко многим» («порядок для элемента»).
Я понимаю это с точки зрения чисто базы данных. Я мог бы справиться, если бы сам написал все запросы, но, учитывая, что EF добавляет к этому некоторую абстракцию, я немного растерялся. Как вы предлагаете мне это сделать?
Код упрощен, чтобы показать только структуру класса. Идентификатор всегда генерируется при добавлении и используется в качестве первичного ключа.
public class User {
public int Id { get; set; }
public string Name { get; set; }
}
public class Item {
public int Id { get; set; }
public string Name { get; set; }
}
public class Order {
public IList<OrderItemWrapper> ItemsList { get; set; }
//Either one of these 2
public Dictionary<Item, int> Items { get; set; }
public User User { get; set; }
public int Id { get; set; }
}
public class OrderItemWrapper {
public Item Item { get; set; }//Will use ItemId as key
public int Amount { get; set; }
}