2016-09-14 4 views
0

Я работаю с инфраструктурой Entity Framework и идентификационной картой (IdentityUser, IdentityRole). У меня есть таблица со сложным ключом (таблица Country), которая указывает на таблицу Users.Соединительный ключ фреймворка

К сожалению, EF может построить только отношение, когда все ключи одинаковы, в противном случае вы получите следующее:

Число свойств в зависимых и главных ролях в отношениях ограничения должно быть одинаковым.

Итак, как я могу справиться с этим? Прямо сейчас я попытался добавить этот составной ключ к ApplicationUser:IdentityUser тоже, но таким образом я должен добавить составной ключ ко всем объектам инфраструктуры идентификации (это означает, что пользователь, роль, требование, логин ...).

Вот мои классы моделей:

class Country 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    [Column(Order = 1)] 
    public int ID { get; set; } 

    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    [Column(Order = 2)] 
    public int Version { get; set; } 

    [Required] 
    [ForeignKey(nameof(Chief))] 
    [Column(Order = 1)] 
    public string Chief_Id { get; set; } 

    [Required] 
    [ForeignKey(nameof(Chief)), Column(Order = 2)] 
    public int Chief_Version { get; set; } 

    public virtual ApplicationUser Chief{ get; set; } 
} 

class ApplicationUser : IdentityUser 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    [Column(Order = 1)] 
    public override string Id 
    { 
     get { return base.Id; } 
     set { base.Id = value; } 
    } 

    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    [Column(Order = 2)] 

    public int Version { get; set; } 
} 

Нико

+0

прямо сейчас у вас есть два ключа на applicationuser, и два из одного столбца FK от Страны для ApplicationUser. Я не уверен, как это сделать в аннотации данных, в свободном API это modelBuilder.Entity (). HasKey (x => new {x.Id, x.Version}); и modelBuilder.Entity () .HasRequired (x => x.Chief) .WithMany(). HasForeignKey (x => new {x.Chief_Id, x.Chief_Version}); – DevilSuichiro

ответ

0

Посмотрите на внешний ключ nameof(Chief), вы не могли бы в полной мере установить отношения.

Существует еще один вопрос, который может помочь here.

Смежные вопросы