Я хотел бы знать, как мне использовать Identity из ASP.NET для создания таблиц для связывания двух разных таблиц.

Например, у нас есть ASP.NetUsers и ASP.NetRoles. Поставщик удостоверений по умолчанию сгенерирует ASP.NetUsersRoles для хранения ролей, назначенных пользователю.

Я хотел бы сделать то же самое для двух других таблиц. Скажем, у меня есть таблица пользователей по умолчанию и таблица с именем Context.

Я хотел бы иметь ASP.NetUsers, Contexts и ASP.NetUsersContexts для связывания пользователя с одним или несколькими контекстами.

Теперь у меня есть таблица контекста с внешним ключом внутри таблицы пользователей Asp.Net, от которой я хотел бы избавиться и использовать таблицы отношений. Является ли это возможным?

Вот как у меня это сейчас:

public class ApplicationUser : IdentityUser
    {
        public virtual ApplicationUserProfile UserProfile {get;set;}
        public virtual ICollection<ApplicationUserContext> UserContext { get; set; }

        public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
        {
            // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
            var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
            // Add custom user claims here
            return userIdentity;
        }
    }

Благодарность!

0
Iosif Bancioiu 19 Июн 2017 в 19:22
Есть третья таблица для отношений "многие ко многим", но похоже, что вы спрашиваете об отношениях "один ко многим", И.Е. identityuser имеет список пользовательских контекстов, а пользовательский контекст имеет только одного пользователя. Так ли это? В приведенном вами примере с ролями и пользователями есть третья таблица, потому что у пользователя может быть много ролей, а у ролей может быть много пользователей.
 – 
Steve
19 Июн 2017 в 20:12
Нет, в моем случае это другой контекст. И у меня есть следующие сценарии 1) Один пользователь несколько контекстов 2) Несколько пользователей один и тот же контекст (-ы)
 – 
Iosif Bancioiu
19 Июн 2017 в 20:22

1 ответ

Лучший ответ

Учитывая имеющийся у вас код, вам необходимо добавить в свой класс ApplicationUserContext следующее:

public virtual ICollection<ApplicationUser> Users {get;set;}

Вам также необходимо убедиться, что ваш класс dbcontext имеет свойство, которое возвращает набор dbset типа ApplicationUserContext's:

public DbSet<ApplicationUserContext> Courses { get; set; }

Он может уже иметь это.

Это устанавливает отношения "многие ко многим" между двумя классами, и EF сгенерирует таблицу сопоставления для отслеживания этих отношений.

0
Steve 19 Июн 2017 в 20:30
Спасибо. Это было решение
 – 
Iosif Bancioiu
19 Июн 2017 в 21:34