#.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; }
}