C# 使用包含自动递增ID的linq查询将记录插入表
我在向包含自动递增ID的表插入记录时遇到问题 我将使用实体框架向表中插入值 这是我的表创建查询C# 使用包含自动递增ID的linq查询将记录插入表,c#,sql-server,asp.net-mvc,linq,C#,Sql Server,Asp.net Mvc,Linq,我在向包含自动递增ID的表插入记录时遇到问题 我将使用实体框架向表中插入值 这是我的表创建查询 USE [DB_Name] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Table_Name]( [Discussion_ID] [int] IDENTITY(1,1) NOT NULL, [Discussion_Name] [nvarchar](50) NULL, [Di
USE [DB_Name]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Table_Name](
[Discussion_ID] [int] IDENTITY(1,1) NOT NULL,
[Discussion_Name] [nvarchar](50) NULL,
[Discription] [nvarchar](255) NULL,
CONSTRAINT [PK_Table_Name] PRIMARY KEY CLUSTERED
(
[Discussion_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
这是我的查看页面代码
@model albaraka.Models.Table_Name
@{
ViewBag.Title = "Discussion_Create";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Discussion_Create</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>AB_Discussion</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.Discussion_ID)
<div class="form-group">
@Html.LabelFor(model => model.Discussion_Name, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Discussion_Name, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Discussion_Name, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Discription, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.TextAreaFor(model => model.Discription, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Discription, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
这是控制器类
[HttpGet]
public ActionResult Discussion_Create()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Discussion_Create(Table_Name discussion)
{
if (ModelState.IsValid)
{
db.Table_Name.Add(discussion);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(discussion);
}
我想在没有用户输入讨论Id的情况下插入记录,这就是为什么我把它放在这里的一个隐藏字段中,如何才能做到这一点?视图中不需要使用任何隐藏元素,您可以删除它。 您应该在保存更改中使用try-catch块。您是否可以捕获EF异常并相应地执行操作:
try{
db.Table_Name.Add(discussion);
db.SaveChanges();
}
catch(Exception Ex){
//trace the exception
}
如果存在异常,则在调试器中为异常设置断点,并在数据库中查看实际插入的内容。
我认为您的代码应该可以工作,所以我不希望出现异常,但检查它们是一种良好的做法。您不能为标识列赋值。它毫无意义。您所需要做的就是使用linq将记录插入实体
var yourTable= new TablName{ Discussion_Name = "Discussion1",Discription ="Some Description" };
var db = new YourEFContext();
db.Table_Name.Add(yourTable);
db.SaveChanges();
框架将把值初始化为0无需隐藏它,只需将其保持为0,然后进行加法。因此,移除隐藏的元素并进行测试。把savechanges放在try-catch块中,这样你就可以看到是否出了问题。如果你不能确切地理解你在说什么,你能提到syntax@Chathz您的代码应该按原样工作。Philip建议删除
@Html.HiddenFor(model=>model.Discussion\u ID)
,因为它不起任何作用。但不管怎样,它都应该起作用。您遇到了什么错误?由于我没有使用前端输入讨论ID的值,因此我的模型状态无效,因为我无法插入值。该值将为0,框架将对其进行初始化。
var yourTable= new TablName{ Discussion_Name = "Discussion1",Discription ="Some Description" };
var db = new YourEFContext();
db.Table_Name.Add(yourTable);
db.SaveChanges();