Вставьте значения в базу данных - Entity Framework - PullRequest
1 голос
/ 10 апреля 2019

Почему этот код не работает?Я хочу вставить в базу данных запись с текущим вошедшим в систему именем пользователя.

[HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> CreateMeme(Memy memy)
        {
            var user=await GetCurrentUser();
            memy.Autor = user.UserName;
            memy.Like = 0;
            memy.Dislike = 0;
            if (ModelState.IsValid)
            {
                _context.Memy.Add(memy);
                _context.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(memy);
        }

Это таблица:

CREATE TABLE [dbo].[Memy] (
    [Id_mema] INT  IDENTITY (1, 1) NOT NULL,
    [autor]   TEXT NULL,
    [like]    INT  NULL,
    [dislike] INT  NULL,
    PRIMARY KEY CLUSTERED ([Id_mema] ASC)
);

У меня 2 ошибки: "Невозможно вставить явное значение для столбца идентификации в таблице'Memy', когда для IDENTITY_INSERT установлено значение OFF "

And

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

Как решить эту проблему?

Метод РЕДАКТИРОВАНИЯ CreateMeme

[HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> CreateMeme(Memy memy)
        {
            var user=await GetCurrentUser();
            memy.Autor = user.UserName;
            memy.Like = 0;
            memy.Dislike = 0;
            if (ModelState.IsValid)
            {
                _context.Memy.Add(memy);
                _context.SaveChanges();
                return RedirectToAction("Index", "Home", new { area = "" });
            }

            return View(memy);
        }

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Если вы являетесь классом c # для определения своих сущностей, вам может потребоваться сделать что-то вроде этого ...

   public class Memy
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id_Mema { get; set; }
        public string Autor { get; set; }

Или, если вы определяете свои атрибуты сущности, используя свободный API, вам может потребоваться сделать что-то вроде этого;

 protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Memy>()
            .Property(p => p.Id_mema)
            .ValueGeneratedOnAdd();
    }

Это здесь должно иметь больше информации об использовании Fluent API и здесь для получения дополнительной информации о украшении ваших POCO с атрибутами для обработки автоинкремента.

-HTH

0 голосов
/ 11 апреля 2019

Эта ошибка предполагает следующее: Ваша таблица Memy установлена ​​на «Is Identity» = «True» с автоматическим приращением.Таким образом, вы не можете вставить значения ключа экспликации, что логично.Пожалуйста, проверьте вашу функцию, возможно, ваш объект параметра метода в CreateMeme имеет значение для memy.Id_Mema.

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> CreateMeme(Memy memy)

Убедитесь, что memy.Id_Mema явно не назначен вашим кодом.Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...