2011-04-04 254 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