Jak zdefiniować relację Many-to-Many za pomocą Fluent API Entity Framework?
Poniżej jest mój model:
public class TMUrl
{
//many other properties
//only property with type Keyword
public List<Keyword> Keywords{get;set;}
}
public class Keyword
{
//many other properties
//only property with type TMUrl
public List<TMUrl> Urls{get;set;}
}
Tak więc, obie jednostki mają relację wiele do wielu. Wybrałem płynny api, aby poinformować jednostkę o tym związku, tj.
modelBuilder.Entity<TMUrl>
.HasMany(s => s.Keywords)
.WithMany(s => s.URLs).Map(s =>
{
s.MapLeftKey("KeywordId");
s.MapRightKey("UrlId");
s.ToTable("KeywordUrlMapping");
});
ale kiedy robię
url.Keywords.Add(dbKey); //where url is object of TMUrl,
//dbKey is an existing/new object of Keyword
db.SaveChanges();
Dostaję wyjątek
An error occurred while saving entities that do not expose foreign key
properties for their relationships....
InnerException:
The INSERT statement conflicted with the FOREIGN KEY constraint
"KeywordMaster_Keyword". The conflict occurred in database "DbName",
table "dbo.KeywordMaster", column 'Id'.The statement has been terminated.
ale kiedy dodam konfigurację od drugiej strony, wszystko działa dobrze. to znaczy
modelBuilder.Entity<KeyWord>
.HasMany(s => s.URLs)
.WithMany(s => s.Keywords)
.Map(s =>
{
s.MapLeftKey("KeywordId");
s.MapRightKey("UrlId");
s.ToTable("KeywordUrlMapping");
});
Czemu?. Dlaczego muszę dodać konfigurację z obu jednostek, w których przeczytałemtutaj i wiele innych miejsc, konfiguracja jednego z podmiotów powinna zrobić.
Co się dzieje, gdy powinienem dodać konfigurację dla obu podmiotów zaangażowanych w związek?
Muszę to zrozumieć. Czemu. Proszę pomóż.