Как определить отношение «многие ко многим» с помощью Fluent API Entity Framework?
Ниже моя модель:
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;}
}
Ясно, что обе сущности имеют отношения многие ко многим. Я выбрал свободный API, чтобы сообщить объектам-структурам об этих отношениях, т.е.
modelBuilder.Entity<TMUrl>
.HasMany(s => s.Keywords)
.WithMany(s => s.URLs).Map(s =>
{
s.MapLeftKey("KeywordId");
s.MapRightKey("UrlId");
s.ToTable("KeywordUrlMapping");
});
но когда я сделаю
url.Keywords.Add(dbKey); //where url is object of TMUrl,
//dbKey is an existing/new object of Keyword
db.SaveChanges();
Я получаю исключение
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.
но когда я добавляю конфигурацию с другой стороны, все работает нормально. то есть
modelBuilder.Entity<KeyWord>
.HasMany(s => s.URLs)
.WithMany(s => s.Keywords)
.Map(s =>
{
s.MapLeftKey("KeywordId");
s.MapRightKey("UrlId");
s.ToTable("KeywordUrlMapping");
});
Почему?. Почему я должен добавить конфигурацию из обоих объектов, где я прочиталВот и во многих других местах, конфигурации для одного из объектов должны делать.
В каком случае я должен добавить конфигурацию для обеих сущностей, участвующих в отношениях?
Мне нужно это понять. Почему. Пожалуйста помоги.