0

我有产品和客户实体。一个客户可以与多个产品相关,一个产品可以仅与一个客户相关。没有产品的客户不能存在,因此仅在添加新产品时创建客户。这听起来像一个简单的场景,但问题是我只需要我的表中唯一的客户。我的意思是,如果将新产品添加到数据库并为其分配了一个已存在于数据库中的客户(由主键确定),那么将向新产品分配与现有客户的关系,而不是添加重复的客户到数据库。有没有一种干净的方法可以通过使用实体框架关系来实现这一点,还是应该插入一些我自己的外部逻辑来控制客户创建和分配到产品?在这两种方式中,请给我一些例子或简要描述情况。实体框架具有唯一实体的一对多关系

回答

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

我在找到答案之前自己找到了解决方案。这是一样的,但你的优雅很多次,因为你只需要一行代码就可以确定是否应该创建一个新的客户,并为框架留下一切。我绝对接受你的答案。你钉了它!非常感谢支持和这样清晰和全面的例子! – Salivan

+0

顾客=顾客?新客户();就足够了 – Szer