Как добавить пользователей в существующую таблицу AspNetUsers с другим контроллером EF6 codefirst - PullRequest
0 голосов
/ 08 июля 2019

У меня есть база данных, сгенерированная первым, с таблицей AspNetUsers со случайно сгенерированным ключом идентификатора строки, в которой уже зарегистрированы некоторые пользователи, мне нужно создать новый контроллер на новом webAPI, который будет регистрировать пользователей в том же AspNetUsers таблица с ролями и паролем Hash.

Я решил пойти code-first-fromDB, так что VisualStudio создаст код из существующих таблиц для меня, чтобы я просто использовал EF6 и добавил новые строки, но я увидел, что с помощью этого метода генерируется случайное число ключ не работает, он говорит мне, что мне нужно дать Id, и я не могу его сгенерировать, потому что есть минимальная, но существующая возможность получить дубликат, так как генератор не будет знать, существует ли ключ в БД

Я попытался изменить унаследованный класс с DBContext на IdentityDbContext и создать новый пользовательский класс, который будет просто использоваться в качестве моста, и я сделал это:

, где ctx: это идентификаторDBcontext.

login: полученная модель конечной точки.

RoleName: имя роли, созданной в БД.


string userRoleId = ctx.AspNetRoles.FirstOrDefault(c => c.Name == "RoleName").Id;
                var hash = new PasswordHasher();
                AspNetUsers newUser = ctx.AspNetUsers.Add(new AspNetUsers
                {
                    UserName = login.email,
                    Email = login.email,
                    EmailConfirmed = false,
                    PasswordHash = hash.HashPassword(login.password)
                });

                newUser.AspNetRoles.Add(new AspNetRoles
                {
                    Id = userRoleId
                });

                //newUser.PasswordHash = hash.HashPassword(login.password);
                var result = ctx.SaveChanges();

когда я запускаю его в почтальоне, я получаю

    {
        "Message": "Error.",
        "ExceptionMessage": "One or more validation errors were detected during model generation:\r\n\r\nLoginControler.Models.IdentityUserRole: : EntityType '

IdentityUserRole' has no key defined. Define the key for this EntityType.\r\nLoginControler.Models.IdentityUserLogin: : EntityType 'IdentityUserLogin' has no key defined. Define the key for this EntityType.\r\nIdentityUserRoles: EntityType: EntitySet 'IdentityUserRoles' is based on type 'IdentityUserRole' that has no keys defined.\r\nIdentityUserLogins: EntityType: EntitySet 'IdentityUserLogins' is based on type 'IdentityUserLogin' that has no keys defined.\r\n",
    "ExceptionType": "System.Data.Entity.ModelConfiguration.ModelValidationException",
    "StackTrace": "   en LoginControler.Controllers.LoginController.<Post>d__1.MoveNext() en c:\\users\\usuario\\documents\\visual studio 2015\\Projects\\LoginControler\\LoginControler\\Controllers\\LoginController.cs:línea 83\r\n--- Fin del seguimiento de la pila de la ubicación anterior donde se produjo la excepción ---\r\n   en System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n   en System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   en System.Threading.Tasks.TaskHelpersExtensions.<CastToObject>d__3`1.MoveNext()\r\n--- Fin del seguimiento de la pila de la ubicación anterior donde se produjo la excepción ---\r\n   en System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n   en System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   en System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__0.MoveNext()\r\n--- Fin del seguimiento de la pila de la ubicación anterior donde se produjo la excepción ---\r\n   en System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n   en System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   en System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext()\r\n--- Fin del seguimiento de la pila de la ubicación anterior donde se produjo la excepción ---\r\n   en System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n   en System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   en System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()"
}
...