Entity framework 与唯一实体的一对多关系

Entity framework one-to-many relationship with unique entities

我有产品和客户实体。一个客户可以与多个产品相关,一个产品只能与一个客户相关。没有产品就不能存在客户,因此只有在添加新产品时才会创建客户。这听起来很简单,但问题是我只希望我的 table 中有唯一的客户。我的意思是,如果新产品被添加到数据库中,并且他被分配了一个已经存在于数据库中的客户(由主键确定),那么新产品被分配到现有客户的关系,而不是被添加的重复客户到数据库。是否有一种干净的方法可以通过使用 Entity Framework 关系自然地实现这一点,或者我应该插入我自己的一些外部逻辑来控制客户创建和分配给产品?在这两种方式中,请给我一些例子或简要描述一下场景。

您的实体应该像这样设置:

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()
};