Настройте основной ключ или набор совместимых свойств внешнего ключа для этой ошибки взаимосвязи с EF core

#.net-core #entity-framework-core #ef-code-first

#.net-core #entity-framework-core #ef-code-first

Вопрос:

Я не уверен, почему я получаю эту ошибку: System.Исключение InvalidOperationException: ‘Связь от ‘Insured’ до ‘Quote.Застрахованные со свойствами внешнего ключа {‘InsuredID’ : string} не могут использовать первичный ключ {‘InsuredID’ : string, ‘ProducerID’: string}, поскольку он несовместим. Настройте основной ключ или набор совместимых свойств внешнего ключа для этой связи.’

Я пытаюсь настроить два ключа в модели котировок, один для моей застрахованной модели и один для моего производителя. Раньше я пытался использовать только один ключ и просто использовать внешние ключи, но это не сработало.

  public class Producer 
    {
        [Key]
        public string ProducerID { get; set;  }
        public string Name { get; set; }
        public string Phone { get; set; }
  
 public class Insured
    {
        [Key]
        public string InsuredID { get; set; }
        public string NamedInsured { get; set; }
        public string Address1 {get; set;} 
  
 public class Quote
    {
        public string InsuredID { get; set; }
        public string ProducerID { get; set; }
        [ForeignKey("ProducerID")]
        public IList<Producer> Producers { get; set; }   
        [ForeignKey("InsuredID")]
        public IList<Insured> Insureds { get; set; }
  

В моем контексте DB:

  protected override void OnModelCreating(ModelBuilder builder)
        {
            builder.Entity<Quote>().HasKey(q => new { q.InsuredID , q.ProducerID});
  

Комментарии:

1. Внешний ключ и свойство навигации по коллекции внутри одного и того же объекта являются взаимоисключающими. Смотрите отношения .

Ответ №1:

Невозможно ссылаться на массив с ключом, он должен быть объектом, а не коллекцией.

 public class Quote
{
    public string InsuredID { get; set; }
    public string ProducerID { get; set; }
    [ForeignKey("ProducerID")]
    public Producer Producer { get; set; }   
    [ForeignKey("InsuredID")]
    public Insured Insured { get; set; }
}