Невозможно установить Id в качестве первичного ключа в модели EF ASP.NET Core с первым кодом - PullRequest
0 голосов
/ 29 декабря 2018

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

public class UserRole : IdentityUserRole<int>
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public int RoleId { get; set; }
    public int UserId { get; set; }
    public virtual Role Role { get; set; }
    public virtual User User { get; set; }
}

Id не может установить первичный ключ и создает дополнительные столбцы UserId1 и RoleId1 в базе данных.В чем проблема?Как я могу решить это?

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Я думаю, что для UserRole сущности ключ должен быть составным, как это:

public class UserRole : IdentityUserRole<int>
{
    public virtual User User { get; set; }
    public virtual Role Role { get; set; }
}

С такой конфигурацией, как:

userRole.HasKey(r => new
                        {
                            r.UserId,
                            r.RoleId
                        });

Вот пример для настройки пользовательскихIdentityDbContext со всеми пользовательскими наследуемыми объектами, включая IdentityUserRole.

0 голосов
/ 29 декабря 2018

В соответствии с соглашением по умолчанию EF создает свойство как свойство внешнего ключа, когда его имя совпадает со свойством первичного ключа связанной сущности.Атрибут [ForeignKey] переопределяет соглашение по умолчанию для внешнего ключа. Он позволяет нам указать свойство внешнего ключа в зависимом объекте, имя которого не совпадает со свойством первичного ключа основного объекта.

Использовать код ниже: -

public class UserRole : IdentityUserRole<int>
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public override int RoleId { get; set; }
    public override int UserId { get; set; }
    [ForeignKey("RoleId")] // Specify ForeignKey Column Name
    public virtual Role Role { get; set; }
    [ForeignKey("UserId")] // Specify ForeignKey Column Name
    public virtual User User { get; set; }
}

ИЛИ Вы можете использовать: -

public class UserRole : IdentityUserRole<int>
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        [ForeignKey("Role")] // Specify Table name on Property
        public override int RoleId { get; set; }
        [ForeignKey("User")] // Specify Table name on Property
        public override int UserId { get; set; }
        public virtual Role Role { get; set; }
        public virtual User User { get; set; }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...