Sql 2008 r2 と Visual Studio 2010 と EF 4.4 を使用しています。そして、コードを長く実行すると、このエラーが発生します。コードは、データベースの関係を説明する必要があります。
モデル生成中に 1 つ以上の検証エラーが検出されました: \tSystem.Data.Entity.Edm.EdmAssociationConstraint: : 関係制約内の依存ロールとプリンシパル ロールのプロパティの数は同じでなければなりません。
データ注釈を使用してこれを解決したい。私は何をしているのですか?
'オファー
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
問題は、データ注釈を使用してこれを解決できるかどうかです。
ここで説明されているモデルビルダーを使用する 必要がありますか: 修正方法: 関係制約内の従属ロールと主ロールのプロパティの数は同じでなければなりませんか?