AspNetCore.Identity.IdentityUser в System.collection.Generic.ICollection

Я делаю хобби-проект для себя, а позже превращаю его в портфолио. Я работаю в Entityframework 6 с бритвенными страницами.

Мой класс UserModel является потомком класса IdentityUser. (Я полагаю, вы знаете, что такое IdentityUser, если нет) https://learn.microsoft.com/en-us/aspnet/core/security/authentication/identity-api-authorization?view=aspnetcore-7.0

Внутри UserModel я также храню коллекцию GroupClass. Мой GroupClass имеет ICollection UserModels. Что создает отношение «многие ко многим» в EF6.

Когда я пытаюсь сохранить объект UserModel в групповом классе, я получаю сообщение об ошибке: Невозможно неявно преобразовать тип в AspNetCore.Identity.IdentityUser в System.collection.Generic.ICollection. Я так понимаю, мне как-то нужно изменить класс groupClass. Чтобы иметь возможность хранить идентификационную переменную вместо пользовательской модели Icollection. ` Чего я не понимаю, так это почему UserModel еще не является частью IdentityUser, поскольку он является дочерним и должен иметь те же параметры, что и родительский.

Мой вопрос: как мне хранить UserModel внутри моего группового класса?

public class GroupClassModel
    {
        [Key]
        public int GroupClassID { get; set; }
        //   info dump removed
        public string userID { get; set; }
        public ICollection<UserModel>? userModels { get; set; }

    }
public class UserModel : IdentityUser
    {

  
         // info dump removed
 
        public int? groupClassID { get; set; }
        public ICollection<GroupClassModel>? GroupClass{ get; set; }


     
    }

            if (ModelState.IsValid)
            {
              
                 //info removed
                if (newGroup == null)
                {
                    var NewGroup = new GroupClassModel()
                    {                     
                        userModels = await userManager.GetUserAsync(User)

                    };
                    Context.groupClass.Add(NewGroup );
                    Context.SaveChanges();

                }

                return RedirectToPage("Index");
            }
            return Page();
    public class Context : IdentityDbContext
    {
        Context(DbContextOptions<Context> options) : base(options)
        {
        }    
        public DbSet<GroupClassModel> groupClassModels { get; set; }
        public DbSet<UserModel> UserModels { get; set; }

        public DbSet<MasterModel> MasterModels { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
          
            base.OnModelCreating(modelBuilder);
          
        }
    }

`

Я попытался изменить Iколлекцию в обоих классах на IКоллекцию. та же проблема. Я попытался изменить Icollection на IdentityUser, но получил массу других ошибок. Теперь я 50/50, если последний способ сделать это правильно.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

GroupClassModel.userModels — это коллекция пользовательских моделей. Эта строка кода пытается установить для этого свойства один экземпляр UserModel.

// this generates an error
userModels = await userManager.GetUserAsync(User);

Вместо этого вам нужно создать новую коллекцию и добавить в нее UserModel текущего пользователя. (Вам также потребуется преобразовать возвращаемое значение userManager.GetUserAsync, которое является IdentityUser, в UserModel.)

userModels = new List<UserModel>();
// currentUser is an IdentityUser
var currentUser = await userManager.GetUserAsync(User);
// cast the IdentityUser to a UserModel
UserModel currentUserModel = (UserModel)currentUser;
userModels.Add(currentUserModel);

а, понятно, вот почему я не мог добавить несколько объектов в свою коллекцию в предыдущей работе. Но это работает отлично. Спасибо @jefftrotman

Rojhat 26.11.2022 19:20

Другие вопросы по теме