【发布时间】:2019-10-02 13:13:06
【问题描述】:
是这样的:
public class ApplicationUser : IdentityUser
{
// omitted for the sake of brevity...
public string LastName { get; set; }
public string FirstName { get; set; }
public string Email { get; set; }
}
public class Invoice
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Index(IsUnique = true)]
[Required]
public int No { get; set; }
[Required]
public DateTime Created { get; set; }
[Required]
public string ManagerId { get; set; }
public virtual ApplicationUser Manager { get; set; }
public virtual ICollection<InvoicePayment> Payments { get; set; }
}
public class InvoicePayment
{
[Key]
public Guid Id { get; set; }
[Required]
public int InvoiceId { get; set; }
public virtual Invoice Invoice { get; set; }
[Required]
public DateTime Created { get; set; }
[Required]
public decimal Total { get; set; }
public string Comment { get; set; }
public virtual ICollection<InvoicePaymentParticipant> Participants { get; set; }
}
public class InvoicePaymentParticipant
{
[Key]
public Guid Id { get; set; }
[Required]
public Guid InvoicePaymentId { get; set; }
public virtual InvoicePayment InvoicePayment { get; set; }
[Required]
public string ManagerId { get; set; }
public virtual ApplicationUser Manager { get; set; }
[Required]
public decimal Part { get; set; }
}
然后我尝试Update-Database 它大喊:
在表“InvoicePaymentParticipants”上引入 FOREIGN KEY 约束“relationship_name”可能会导致 > 循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 >FOREIGN KEY 约束。 无法创建约束或索引。查看以前的错误。
我误解了多级联路径的概念。
我不明白问题出在哪里,因为如果我们想删除经理,我们也希望他们的付款参与记录以及他们创建的任何发票都会被删除。
你将如何在给定的架构中解决这个问题?
【问题讨论】:
-
这不是“多级联路径”的意思。 SQL 服务器不允许多个级联路径到达同一个表(尽管理论上是可能的),这在您的示例中发生,即在路径 Invoice->Manager、Invoice->Payments->Participants->Manager
-
如何重新设计这些表以避免错误?
-
将其中一种关系设为可选和/或禁用约束的级联删除(在模型构建器中)
-
IMO,您不能在非规范化列上定义受信任的 FK。像 ManagerId 是在多个地方定义的。它必须从一个地方删除或至少删除 IsRequire 属性。如果它正在抛出,请检查这样做之后错误与否。这一点也很好,例如如果您要删除类别,那么它的所有订单详细信息都应该被删除。
-
您可能会发现这很有用dba.stackexchange.com/questions/193292/…
标签: sql-server entity-framework foreign-keys entity-framework-migrations