вам не нужно указывать отношения между телефоном и клиентом два раза здесь. Просто используйте только один такой.
modelBuilder.Entity<Client>().HasMany(c => c.Phones).WithMany(i => i.Clients)
.Map(t => t.MapLeftKey("PhoneID")
.MapRightKey("ClientID")
.ToTable("ClientPhone"));
вам не нужно иметь модели для сопоставления таблиц отношений, таких как "ClientPhone", потому что об этом позаботится EF. Если у вас есть устаревшая база данных, вы можете настроить сопоставления, как в моем ответе. И как @Ladislav Mrnka сказал, что для отношения один-ко-многим на уровне базы данных вы не хотите хранить отдельную таблицу для отношений. Для этого
public class Client
{
[Key]
public int ClientID { get; set; }
public string Name { get; set ;}
public virtual ICollection<Phone> Phones { get; set; }
}
public class Phone
{
[Key]
public int PhoneID { get; set; }
public string Number { get; set; }
public virtual Client Client { get; set; }
}
этого будет достаточно с EF. Он создаст две таблицы со столбцом clientId в таблице Phone , чтобы сохранить связь.
Проблема в том, что у вас есть отдельная таблица для отношений в вашей устаревшей базе данных. Я думаю, что унаследованная база данных определена для отношений «многие ко многим». Подумайте дважды о логике домена.
Если вы хотите сохранить отношения один-ко-многим, я думаю, вы можете определить на уровне домена отношение многие-ко-многим (у телефона много клиентов, а у клиента много телефонов в модельных предложениях), а на бизнес-уровне добавить проверки для сохранения только одного клиента для телефона .