Структура сущностей отношения один-ко-многим с уникальными сущностями
У меня есть объекты Product и Customer. Один клиент может быть связан с несколькими продуктами, один продукт может быть связан только с одним клиентом. Клиент не может существовать без Продукта, поэтому клиенты создаются только при добавлении нового Продукта. Это простой сценарий, но дело в том, что я хочу, чтобы в моем столе были только уникальные клиенты. Я имею в виду, что если новый продукт добавлен в базу данных и ему назначен клиент, который уже существует в базе данных (определяется первичным ключом), то новому продукту присваивается отношение к существующему клиенту, а не добавляется дубликат клиента в базу данных. Есть ли чистый способ достичь этого естественным путем, используя отношения Entity Framework, или я должен подключить какую-то свою внешнюю логику, чтобы контролировать создание и назначение Заказчика Продуктами? В обоих случаях, пожалуйста, покажите мне пример или опишите сценарий вкратце.
1 ответ
Ваши сущности должны быть настроены примерно так:
public class Customer
{
[Key]
public int Id { get; set; }
public List<Product> Products { get; set; }
}
public class Product
{
[Key]
public int ProductId { get; set; }
public int CustomerId { get; set; }
[ForeignKey("CustomerId")]
public Customer Customer { get; set; }
}
Затем, когда вы сохраняете Продукт, вы должны проверить, существует ли клиент в БД, и назначить этого клиента. Если у клиента продукта есть действительный PK, он обновит базу данных, если нет, то создаст клиента. EF позаботится об этом при сохранении. Например:
var customer = context.Customers.FirstOrDefault(x => x.Id = id);
var product = new Product()
{
Customer = customer ?? new Customer()
};