gpt4 book ai didi

c# - Entity Framework 代码优先 : How can I model a Customer/Address relationship?

转载 作者:行者123 更新时间:2023-11-30 22:40:31 25 4
gpt4 key购买 nike

这是我的简化模型:

public class Customer
{
public int ID { get; set; }
public int MailingAddressID { get; set; }
[ForeignKey("MailingAddressID")]
public Address MailingAddress { get; set; }

public virtual ICollection<Address> Addresses { get; set; }
}

public class Address
{
public int ID { get; set; }
public int CustomerID { get; set; }
[ForeignKey("CustomerID")]
public Customer Customer { get; set; }
}

当我尝试创建数据库时出现以下错误:

Introducing FOREIGN KEY constraint 'Customer_MailingAddress' on table 'Customers' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint. See previous errors.

我不明白这是什么问题。我了解无法删除具有地址的客户,而且作为客户邮寄地址的地址也无法删除。

这符合我的设计,因为如果客户有一个或多个地址,那么其中一个必须是邮寄地址,并且该地址无法删除。

那么我在这里缺少什么?谢谢!

编辑:

忘记提及我尝试在 OnModelBuilding 方法中添加以下行:

modelBuilder.Entity<Customer>().Property(x => x.MailingAddressID).IsOptional();

这允许建立数据库,但是在添加客户时出现以下错误:

The INSERT statement conflicted with the FOREIGN KEY constraint "Customer_MailingAddress". The conflict occurred in database "DomainModel.SeasideHeightsEntities", table "dbo.Addresses", column 'ID'. The statement has been terminated.

仍然不知道如何正确建模。

最佳答案

问题是...哪个先被删除,客户还是邮寄地址?您不能同时删除它们,删除将按顺序发生。当第一个被删除时,它不符合规则 b/c 第二个尚未被删除。

根据我对您的模型的了解,我不会使用外键来处理此逻辑,我会在对象验证期间通过在 MailingAddress 属性上放置 [Required] 属性而不是外键来处理它。

您还应该考虑其他实现逻辑,以确保 MailingAddress 是 Addresses 集合的一部分。

关于c# - Entity Framework 代码优先 : How can I model a Customer/Address relationship?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5159030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com