实体框架与唯一实体的一对多关系



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

您的实体应该设置如下:

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

最新更新