Я пытаюсь смоделировать отношения многие ко многим. Это мой контекст:
modelBuilder.Entity<Description>(entity =>
{
entity.HasKey(e => new { e.DescriptionID, e.Language });
});
modelBuilder.Entity<Company>(entity =>
{
entity.HasKey(e => e.CompanyID);
});
modelBuilder.Entity<CompanyDescription>()
.HasKey(cd => new { cd.CompanyID, cd.DescriptionID });
modelBuilder.Entity<CompanyDescription>()
.HasOne(cd => cd.Company)
.WithMany(c => c.CompanyDescriptions)
.HasForeignKey(bc => bc.CompanyID);
modelBuilder.Entity<CompanyDescription>()
.HasOne(cd => cd.Description)
.WithMany(c => c.CompanyDescriptions)
.HasForeignKey(bc => bc.DescriptionID);
CompanyDescription - кросс-таблица.
И компания, и описание содержат
public ICollection<CompanyDescription> CompanyDescriptions { get; set; }
Компания может иметь много описаний, а описание может иметь много компаний. В настоящее время база данных настроена так, что описание не содержит внешнего ключа, а компания содержит только «DescriptionID», но не язык. Таким образом, этот «внешний ключ» не соответствует первичному ключу описания.
Из-за этого я получаю:
Отношение «CompanyDescription.Description» к
«Description.CompanyDescription» со свойствами внешнего ключа
{'DescriptionID': int} не может указывать первичный ключ
{'DescriptionID': int, 'Language': string}, потому что это не
совместимы. Настройте основной ключ или набор совместимых внешних
ключевые свойства для этого отношения.
Как лучше всего решить эту проблему?
Редактировать, модель классов:
public partial class Company
{
public int CompanyID { get; set; }
public int DescriptionID { get; set; }
public ICollection<CompanyDescription> CompanyDescriptions { get; set; }
}
public partial class Description
{
public int DescriptionID { get; set; }
public ICollection<CompanyDescription> CompanyDescriptions { get; set; }
}
Таблица кросс:
public class CompanyDescription
{
public int CompanyID { get; set; }
public RN_Company Company { get; set; }
public int DescriptionID { get; set; }
public string Language { get; set; }
public Description Description { get; set; }
}