Ниже приведена моя модель:
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");
});
Почему?. Почему я должен добавлять конфигурацию из обоих объектов, где я читал здесь и во многих других местах, должна быть выполнена настройка для одного из объектов.
В каком случае, когда я должен добавить конфигурацию для обоих объектов, участвующих в отношении?
Мне нужно это понять. Зачем. Пожалуйста, помогите.