Как создать внешний ключ внутри моделей для определенного столбца составного первичного ключа в Entity Framework

#c# #entity-framework #entity-framework-core #code-first #entity-framework-migrations

#c# #сущность-фреймворк #сущность-структура-ядро #сначала код #entity-framework-миграции

Вопрос:

 class1
{
    [key]
    public string id1 {get; set;}

    [Key]
    public string key2 {get; set;}
}

class2
{
    [foreignKey("class1")]
    public string class1Id{ get; set; }
}
 

Теперь здесь, внутри class2 , я хочу использовать только id1 столбец class1 в качестве внешнего ключа.

Как это сделать?

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

1. Похоже, это не связано с ASP.NET .

2. Вы не можете. FK может указывать только на уникальный столбец в таблице ссылок (либо первичный, либо альтернативный ключ).

Ответ №1:

Если вы предпочитаете аннотации данных, просто примените атрибут ForeignKey к свойству навигации и предоставьте разделенный запятыми список с именем свойства FK

  class1{
    [key]
    public string id1 {get; set;}

    [Key]
    public string key2 {get; set;}
    }

    class2{

    public string id1 { get; set;}

    public string key2 { get; set;}

      [ForeignKey("id1,key2")] // <= the composite FK
      public virtual class1 class1{ get; set; }

    }
 

использование свободной конфигурации API намного проще для понимания и менее подвержено ошибкам:

 modelBuilder.Entity< class2>()
    .HasRequired(e => e. class1) 
    .HasForeignKey(e => new { e.id1, e.key2 });