2013-02-19 52 views
1

Iam使用Sql 2008 r2和visual studio 2010和EF 4.4。而且,我得到這個錯誤運行代碼更長時間了。該守則應解釋數據庫關係。模型生成過程中檢測到修復使用數據註解在模型生成期間檢測到一個或多個驗證錯誤

一個或多個驗證錯誤: \ tSystem.Data.Entity.Edm.EdmAssociationConstraint:在>從屬和主角色的屬性有關係約束的數目必須是相同的。

我想用dataannotation來解決這個問題。我在做什麼?

'發售

Public Class Offer 

     <Key(), DatabaseGenerated(DatabaseGeneratedOption.None)> 
     Public Property Offer_ID As Integer 
     Public Property Name As String 

    End Class 

' 頭

Public Class Head 

    <Key(), Column(Order:=0), DatabaseGenerated(DatabaseGeneratedOption.None)> 
    Public Property Head_ID As Integer 

    <ForeignKey("Offer_ID")> 
    Public Property Offer As Offer 

    <Key(), Column(Order:=1)> 
    Public Property Offer_ID As Integer 

    Public Property Name As String 


End Class 

'線

Public Class Line 

     <Key(), Column(Order:=0), DatabaseGenerated(DatabaseGeneratedOption.None)> 
     Public Property Line_ID As Integer 

     <ForeignKey("Head_ID")> 
     Public Property Head As Head 

     <Key(), Column(Order:=1)> 
     Public Property Head_ID As Integer 

     <ForeignKey("Offer_ID")> 
     Public Property Offer As Offer 

     <Key(), Column(Order:=2)> 
     Public Property Offer_ID As Integer 

     Public Property Name As String 

    End Class 

' 的DbContext

Public Class DatabaseContext 
     Inherits DbContext 

     Public Sub New(p_ConnectionString As String) 
      MyBase.New(p_ConnectionString) 
     End Sub 

     Public Property Offers As DbSet(Of Offer) 
     Public Property Heads As DbSet(Of Head) 
     Public Property Lines As DbSet(Of Line) 

    End Class 

「創建一個簡單的例子

Private Shared Sub CreateME() 

     Dim offer As New Offer 
     offer.Name = "Offer1" 
     offer.Offer_ID = 1 

     Dim head As New Head 
     head.Head_ID = 1 
     head.Name = "head1" 
     head.Offer = offer 
     head.Offer_ID = offer.Offer_ID 

     Dim line As New Line 
     line.Head = head 
     line.Head_ID = head.Head_ID 
     line.Line_Id = 1 
     line.Name = "line1" 
     line.Offer = offer 
     line.Offer_ID = offer.Offer_ID 

     Using context = New DatabaseContext(GetConnectionString()) 

      context.Offers.Add(offer) 
      context.Heads.Add(head) 
      context.Lines.Add(line) 
      context.SaveChanges() 
     End Using 

    End Sub 

因此問題是我可以解決這個使用數據註解?

我一定要使用模型構建器在這裏解釋: How to fix: The number of properties in the Dependent and Principal Roles in a relationship constraint must be identical?

回答

2

首先,我認爲你的數據庫關係會喜歡這個,我是否正確?

Database Relations

  • Offers具有Offer_ID
  • Heads簡單主鍵具有Head_ID和複合主鍵Offer_ID
  • Heads具有外鍵Offers
  • Lines具有複合主鑰匙Line_IDHead_IDOffer_ID
  • Lines有一個外鍵Heads

假設我在我的你的問題的正確讀...


你幾乎完美的代碼。唯一的是Line類。在這裏,您要指定:

<ForeignKey("Head_ID")> 
Public Property Head As Head 

而是你需要:

<ForeignKey("Head_ID, Offer_ID")> 
Public Property Head As Head 

所有到一個棘手的逗號分隔的字符串!

原因是Heads上的主鍵是一個組合,因此您必須指定所有列以使關係正確。

+0

非常感謝,即使有圖片也能給出很好的答案。我現在沒有在一個註釋中可以有兩個外鍵。有一些更復雜的數據庫示例使用數據註釋,一個網頁 - 我認爲你也可以這樣做: 公共屬性頭部爲頭部 Public Property Head_ID As Integer Public Property Offer_ID As Integer – fedda 2013-02-21 08:47:11

1

你的頭類有Head_Id的外鍵,包括與和提議ID。您的Line類需要通過由Head ID和Offer Id組成的外鍵來引用Head。

您可以使用數據註釋和列順序語法。您應該能夠在MSDN上找到確切的語法。

相關問題