将值插入数据库-实体框架

时间:2019-04-10 18:44:01

标签: c# entity-framework asp.net-core

为什么此代码不起作用? 我想用当前登录的用户名插入数据库记录。

[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个错误: “当IDENTITY_INSERT设置为OFF时,无法为表'Memy'中的标识列插入显式值”

“更新条目时发生错误。有关详细信息,请参见内部异常。”

如何解决这个问题?

编辑 方法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 个答案:

答案 0 :(得分:1)

如果您是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();
    }

here应该具有使用Fluent API的更多信息,而here则具有有关使用属性来处理POCO来处理自动增量的更多信息。

-HTH

答案 1 :(得分:0)

此错误提示以下内容: 您的Memy表会自动递增设置为'Is Identity'='True'。 因此,您不能插入显式键值,这是合乎逻辑的。 请检查函数,也许您在CreateMeme中的方法参数对象的值为memy.Id_Mema

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

请确保您的代码未明确分配memy.Id_Mema。 希望这会有所帮助。