Оператор INSERT конфликтует с FOREIGN KEY с идентификатором пользователя (ASP Identity) - PullRequest
0 голосов
/ 13 марта 2019

Я работаю над функцией, которая позволяет пользователю отправлять сообщение через форму, она успешно получает идентификатор пользователя из AspNetUsers.Я включил переключатель, который дает пользователю возможность стать анонимным представлением.Код выглядит следующим образом:

protected void AddPost(object sender, EventArgs e)
{



    var User = System.Web.HttpContext.Current.User.Identity.GetUserId();
    if (Convert.ToBoolean(Int32.Parse(inputAnonymous.SelectedValue)))
    {
        User = "anonymous";
    }

    Post newPost = new Post()
    {
        postTitle = inputTitle.Text,
        postBody = inputBody.Text,
        postDescription = inputDescription.Text,
        postCategory = inputCategory.SelectedValue,
        postAnonymous = Convert.ToBoolean(Int32.Parse(inputAnonymous.SelectedValue)),
        Id = User
    };

    using (var _dbContext = new ApplicationDbContext())
    {
        _dbContext.Posts.Add(newPost);
        _dbContext.SaveChanges();
    }
}

Когда опция «Нет» выбрана для анонимности пользователя, сообщение отправляется нормально, и оно отправляет идентификатор в базу данных и т. Д., Но когда я нажимаю «Да»«когда я слежу за отладчиком, он говорит, что он распознает, что он анонимный, и что он должен изменить userId на строку« anonymous »и передать это как Id в базе данных, но я продолжаю получать эту ошибку, которая предотвращаетМне это выглядит следующим образом

SqlException: оператор INSERT вступил в конфликт с ограничением FOREIGN KEY «FK_dbo.Posts_dbo.AspNetUsers_Id».Конфликт произошел в базе данных «aspnet-WebEnterprise-20190201040107», таблица «dbo.AspNetUsers», столбец «Id».Оператор был прерван.

ОБНОВЛЕНИЕ: я добавил этот бит кода в свою конфигурацию .cs

 {
                var passwordHash = new PasswordHasher();
                string password = passwordHash.HashPassword("Anonymous@123");
                context.Users.AddOrUpdate(u => u.UserName,
                    new ApplicationUser
                    {
                        UserName = "Anonymous@Anonymous.com",
                        PasswordHash = password,
                        PhoneNumber = "12345678911",
                        Email = "Anonymous@Anonymous.com"
                    });
                context.Roles.AddOrUpdate(
                    new IdentityRole { Id = "a1f04ba5-5600-4a6e-be43-ae0d6360c0ab", Name = "Anonymous" }
                    );
            }

, но когда я обновляю базу данных в диспетчере пакетов nuget, я получаюследующая ошибка

"Произошла ошибка при обновлении записей. Подробности см. во внутреннем исключении."

1 Ответ

1 голос
/ 13 марта 2019

Нет пользователя с идентификатором «анонимный», и вы получаете сообщение об ошибке.AspNetUsers не содержит ни одного пользователя с идентификатором «анонимный».В этом коде нет ничего плохого, кроме использования значения Id, которое не существует.

Что касается этой проблемы, я предлагаю создать анонимного пользователя, получить его идентификатор и привязать этот идентификатор ко всемсообщения, которые должны быть анонимными.В этом случае все анонимные сообщения будут иметь одинаковый идентификатор, но это не должно иметь значения, поскольку они в любом случае являются анонимными.Проверьте эту и эту ссылку для получения дополнительной информации о том, как вставлять пользователей через архитектуру с первым кодом

...