База данных интернет магазина. Есть два класса. User
и Book
. Хочу создать третий класс Order
, в который буду помещать заказы. Проблема вот в чем. У одного пользователя в заказе может быть множество книг, но как это описать в EF? C помощью допкласса UserBookOrder
я не знаю как сделать чтобы у в одном заказе было множество книг
public class UserBookOrder
{
public int UserId { get; set; }
public User User { get; set; }
public int BookId { get; set; }
public Book Book { get; set; }
}
public class User
{
public int UserId { get; set; }
public string Name { get; set; }
public string Email { get; set; }
}
public class Book
{
public int BookId { get; set; }
public string View { get; set; }
public string Fio { get; set; }
public string Name { get; set; }
}
В принципе у вас все верно описано. Для решения вашей задачи, необходим дополнительный класс, по вашему Order, который будет в себе хранить UserId и BookId всех пользователей и отмеченных продуктов. В итоге по ссылке на пользователя вы сможете получить все книги,а точнее их Id, и уже по Id получить название книги.
public class Order()
{
public int UserId {get;set;}
public int BookId {get;set;}
}
Получить все книги у пользователя
var UserBook = Order.Where(o=>o.UserId == UserId).ToList();
Рекомендую.
public class Order()
{
// можно будет получить заказ по id
public int Id {get;set;}
// ссылка на юзера, что б было удобней к нему обращаться из корзины, например
public User User {get;set;} // или UserId
// Хотя многие, в том числе и я, рекомендовали бы пользоваться ICollection<Book>.
public IEnumerable<Book> BooksInOrder {get;set;}
}
И теперь данную сущность из базы можно тащить запросом по Id заказа:
// где Orders - коллекция всех ваших заказов
Orders.FirstOrDefault(ord => ord.id == myOrderId);
Либо по Id юзера:
Orders.FirstOrDefault(ord => ord.User == myCurrentUser);
Таким образом, вы получите и User
'a и коллекцию заказанных Books
в контексте конкретного заказа.
UPD: Так же, имело бы смысл(если есть необходимость), в этом классе Order
добавить поле DateTime OrderDate
, для того, что бы не было необходимости тянуть обо всех заказах по конкретному User
'у.
Например:
//заберем сегодняшние заказы
Orders.FirstOrDefault(ord => ord.OrderDate == DateTime.Today);
// заберем заказы от 5 дней назад до сегодняшнего
Orders.FirstOrDefault(ord => ord.OrderDate <= DateTime.Today && ord.OrderDate >= DateTime.Today.AddDays(-5));
// заберем сегодняшний заказ(ы) конкретного пользователя
Orders.FirstOrDefault(ord => ord.User.Id == MyUser && ord.OrderDate == DateTime.Today);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Когда мы производим удаление с помощью Remove range в ef core у нас все выполняется в транзакции? Если, что то не удалится из списка удаляемых объектов...
Есть 2 таблицы: user и transactionСвязь один ко многим (1 пользователь – много транзакций)
У меня есть программа в которой выводятся данные в QTableView из таблицы mysqlКак реализовать что бы при нажатии на запись таблицы в списке подробная...