Ключевые вопросы Entity Framework - PullRequest
0 голосов
/ 12 июня 2018

При попытке входа в систему появляется следующая ошибка:

Project.Model.Identity.UserLogin:: EntityType 'UserLogin' не определен ключ.Определите ключ для этого EntityType.UserLogins: EntityType: EntitySet «UserLogins» основан на типе «UserLogin», для которого не определены ключи.

Я пытаюсь использовать составной ключ в моем dbcontext

  // Primary Key
  this.HasKey(t => new { t.LoginProvider, t.ProviderKey, t.UserId });

Но похоже, что он не может это понять, похоже, что он ищет ключ в модели, а не в контексте, потому что, когда я добавил ключевое слово «[Key]» в модель, он пожаловался на необходимость использования HasKey длясоставные ключи

public partial class UserLogin
{
    [Key]
    public string LoginProvider { get; set; }
    [Key]
    public string ProviderKey { get; set; }
    [Key]
    public string UserId { get; set; }
    public virtual User User { get; set; }
}

Как мне пройти через это?Я добавляю HasKey в модель, и если да, то как, и почему он не поднимается в контексте?

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Попробуйте добавить Порядок столбцов аннотации данных ниже атрибута [Key]

[Key]
[Column(Order=1)]
public string LoginProvider { get; set; }
[Key]
[Column(Order=2)]
public string ProviderKey { get; set; }
[Key]
[Column(Order=3)]
public string UserId { get; set; }
public virtual User User { get; set; }

В EF 6 атрибут Key создает PK со столбцом идентификаторов при применении к одному целочисленному типуимущество.Составной ключ не создает столбец идентификаторов для целочисленного свойства.

0 голосов
/ 12 июня 2018

Как описано в документации,

Когда у вас есть составные ключи, Entity Framework требует, чтобы вы определили порядок свойств ключа.Вы можете сделать это, используя примечание к столбцу, чтобы указать порядок.

Попробуйте изменить код следующим образом:

public partial class UserLogin
{
    [Key]
    [Column(Order=1)]
    public string LoginProvider {get; set;}
    [Key]
    [Column(Order=2)]
    public string ProviderKey {get; set; }
    // and so on...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...