C# 使用包含自动递增ID的linq查询将记录插入表

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

我在向包含自动递增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,
    [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();