Структура сущностей отношения один-ко-многим с уникальными сущностями

У меня есть объекты 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()
};
Другие вопросы по тегам