我首先使用代码设计我的数据库,我想我需要一些帮助 .
我收到此错误:
在表'Invoices'上引入FOREIGN KEY约束'SalesOrder_Invoices'可能会导致循环或多个级联路径 . 指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束 . 无法创建约束 . 查看以前的错误 .
我想尝试以下关系/键:
--> = 1 to Many Relationship
-
客户 - > CustomerLocation
-
CustomerLocation - > SalesOrder
-
SalesOrder - >发票
-
SalesRep - > SalesOrder
-
PaymentTerm - >客户
-
PaymentTerm - > SalesOrder
-
PaymentTerm - >发票
我试图通过以下标准来定义它们:
<ClassName><PrimaryKeyID>
示例: Customer
具有 ID
属性,因此在 CustomerLocation
中我定义了外键,如下所示:
Public Property CustomerID AS Integer
我所要做的就是定义外键是否正确?我是否还必须为我定义的每个键设置导航属性?
并且,我可以在对象的同一主键上没有多个外键吗?
Updated
那么要定义一个关系,你使用 ClassName.PrimaryKeyProperty
吗?或者你使用导航属性?或两者?困惑!!
Update 2
因此,为了使关系发挥作用,你必须定义双方......我想 .
Public Class Customer
Public Property ID AS Integer
Public Overrideable Property Locations AS ICollection(OF CustomerLocation)
End Class
Public Class CustomerLocation
Public Property ID AS Integer
Public Property CustomerID AS Integer
End Class
2 回答
当您有多个级联删除路径时,这是由SQL Server引起的异常 . 如果删除PaymentTerm,它将触发所有三个关系的级联删除 . 创建
SalesOrder
或Invoice
时,这会爆炸 . EF默认情况下会创建与ON DELETE CASCADE
的所有一对多关系,您可以将您的特定关系重新映射为不使用它:或者您可以通过删除约定将其全局关闭:
您可以通过使用如下所示的行编辑生成的
Up()
方法来解决特定迁移上的此错误:并在违规关系上将
cascadeDelete:
值更改为false .阅读this,我相信这会帮助您找到答案 .
另外,根据ScottGu的blogpost,我认为一般情况下你应该按照以下方式创建类(我没有仔细阅读它,所以你应该查看它以获得更多细节):