为什么此代码不起作用? 我想用当前登录的用户名插入数据库记录。
[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);
}
答案 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
。
希望这会有所帮助。