Я работаю с инфраструктурой 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; }
}
Нико
прямо сейчас у вас есть два ключа на 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