2 つのエンティティがSearch
ありSearchTerm
、多対多の関係があります。新しい を作成し、それに沿ってSearch
を追加するList(Of SearchTerm)
と、すべてが完全に機能します。既存の を使用しようとすると、次のSearchTerm
ようにクラッシュします。
リレーションシップの外部キー プロパティを公開しないエンティティの保存中にエラーが発生しました。単一のエンティティを例外のソースとして識別できないため、EntityEntries プロパティは null を返します。保存中の例外の処理は、エンティティ タイプで外部キー プロパティを公開することで簡単に行うことができます。詳細については、InnerException を参照してください。
内部例外: INSERT ステートメントが FOREIGN KEY 制約 "FK_tblSearchesSearchTerms_tblSearchTerms" と競合しました。データベース「CASSAudits」、テーブル「dbo.tblSearchTerms」、列「SearchTermID」で競合が発生しました。ステートメントは終了されました。
サンプルコードは次のとおりです。
Dim foundTerm As SearchTerm = DataSource.SearchTerms.FirstOrDefault(Function(term) term.FieldName = "fieldName")
DataSource.Searches.Add(New Search() With {
.Terms = New List(Of SearchTerm) From { foundTerm }
}
DataSource.SaveChanges()
ここにエンティティがあります
Public Class SearchTerm
Public Property SearchTermID As Integer
Public Overridable Property Searches As ICollection(Of Search)
Public Property FieldName As String
Public Property ComparisonType As String
Public Property Value As String
End Class
Public Class Search
Public Property SearchID As Integer
Public Overridable Property Terms As ICollection(Of SearchTerm)
Public Property FromPage As String
Public Property SearchDate As Date
Public Property User As String
End Class
多対多の関係は、次のOnModelCreating
ようにカスタム マッピングされます。
modelBuilder.Entity(Of Search) _
.HasMany(Function(search) search.Terms) _
.WithMany(Function(term) term.Searches) _
.Map(Function(m) m.MapLeftKey("SearchTermID").MapRightKey("SearchID").ToTable("tblSearchesSearchTerms"))