2011-04-04 109 views
0

我首先使用EF 4代码,而且我在这里有一段时间。我不断收到错误:实体框架4.1 - 外键索引?

{"Introducing FOREIGN KEY constraint 'SalesRepresentative_SalesOrders' on table 'SalesOrders' 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."}

考虑下面的代码。如果我注释掉外键ID字段,它会生成它自己的并且它能正常工作,但是如果我不这样做,那么我会得到错误。

Public Class SalesOrder 
     Inherits EntityBase(Of SalesOrder) 

#Region "Members/Properties" 

     Public Property ID As Integer 
     'Public Property CustomerID As Integer 
     'Public Property CustomerLocationID As Integer 
     'Public Property SalesRepresentativeID As Integer 
     'Public Property SalesOrderStatusID As Integer 

     Public Overridable Property Customer As Customer 
     Public Overridable Property CustomerLocation As CustomerLocation 
     Public Overridable Property Items As ICollection(Of SalesOrderItem) 
     Public Overridable Property Status As SalesOrderStatus 
     Public Overridable Property SalesRepresentative As SalesRepresentative 

#End Region 

    End Class 

Public Class SalesRepresentative 
     Inherits EntityBase(Of SalesRepresentative) 

#Region "Members/Properties" 

     Public Property ID As Integer 

     Public Property FirstName As String 
     Public Property LastName As String 

     Public Overridable Property Customers As ICollection(Of Customer) 
     Public Overridable Property SalesOrders As ICollection(Of SalesOrder) 

#End Region 

    End Class 

所以我想知道的几件事情:

我一定要建立外键 属性和导航 财产?我是否只需在子对象 上创建 导航属性?我是否只需在父 对象上创建 导航属性?

任何人有任何想法?谢谢!!

+0

我更喜欢“指数”......但那只是我。 :) – xanadont 2011-04-04 05:49:13

回答

1

您不必在两边都创建导航属性,但必须创建导航属性at least on one side才能在数据库中创建关系。

此外,您不必使用属性作为外键。此属性在independent and foreign key association之间不同。只要说使用外键属性反对ORM的想法,但它使得与EF的生活更容易。

评论FK的部分很有趣。您能否在数据库中验证关系是否已创建以及它们如何配置(级联删除)?

+0

我发现如果我没有定义FK,EF在数据库中创建它,但它是可空的。所以有点糟糕!所以我在想,为了得到你想要的东西,你需要在关系的子端定义key和nav属性,然后在父对象上定义nav属性?至少父母的导航属性和孩子的FK? – Sam 2011-04-04 06:00:32

+0

是的,当我注释掉属性时它确实创建了关系,但FK可以为空。 – Sam 2011-04-04 06:01:21

+0

你不需要导航。属性在双方。在流利的映射中,您可以使用'.HasOptional'或'.HasRequired'来定义nav。 FK一方的财产不可空。 – 2011-04-04 06:04:10