J'ai deux entités, Search
et SearchTerm
avec plusieurs à plusieurs. Lorsque je crée un nouveau Search
et que j'y ajoute un List(Of SearchTerm)
, tout fonctionne parfaitement. Si je tente d'utiliser une plante il SearchTerm
, déjà existant:Ajouter des entités liées à plusieurs à plusieurs (EF 4.1)
Une erreur est survenue lors de l'enregistrement des entités qui ne pas exposer les propriétés clés étrangères pour leurs relations. La propriété EntityEntries renvoie null car une seule entité ne peut pas être identifiée comme source de l'exception. La gestion des exceptions lors de l'enregistrement peut être facilitée en exposant les propriétés de clé étrangère dans vos types d'entité. Voir l'exception interne pour plus de détails.
Exception interne: L'instruction INSERT était en conflit avec la contrainte FOREIGN KEY "FK_tblSearchesSearchTerms_tblSearchTerms". Le conflit s'est produit dans la base de données "CASSAudits", table "dbo.tblSearchTerms", colonne "SearchTermID". La déclaration a été terminée.
est ici un exemple de code:
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()
Voici les entités
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
La relation plusieurs à plusieurs est mise en correspondance personnalisée dans OnModelCreating
comme ceci:
modelBuilder.Entity(Of Search) _
.HasMany(Function(search) search.Terms) _
.WithMany(Function(term) term.Searches) _
.Map(Function(m) m.MapLeftKey("SearchTermID").MapRightKey("SearchID").ToTable("tblSearchesSearchTerms"))