C# 无法将对象添加到context.DbSet。保存更改不起作用

C# 无法将对象添加到context.DbSet。保存更改不起作用,c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,我在控制器中有此GET方法: public ActionResult Reserve(int id) { ViewBag.staffID = new SelectList(context.Staffs, "staffID", "fName"); ViewBag.roomID = id; return View(); } 相应的观点是: @model _00002165.Models.Reservation @{ ViewBag.Title = "Reserve

我在控制器中有此GET方法:

public ActionResult Reserve(int id)
{
    ViewBag.staffID = new SelectList(context.Staffs, "staffID", "fName");
    ViewBag.roomID = id;
    return View();
}
相应的观点是:

@model _00002165.Models.Reservation

@{
    ViewBag.Title = "Reserve";
}

<h2>Reserve</h2>
 @using (Html.BeginForm()) {
    @Html.ValidationSummary(true)


    <div class="editor-label">
        <label>Room Number</label>
    </div>
    <div class="editor-field">
        <input type="text" value="@ViewBag.roomID" readonly name="roomID"/>
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.fromDate)
    </div>
    <div class="editor-field">
        @Html.TextBoxFor(model => model.fromDate)
        @Html.ValidationMessageFor(model => model.fromDate)
    </div>
    <div class="editor-label">
        @Html.LabelFor(model => model.toDate)
    </div>
    <div class="editor-field">
        @Html.TextBoxFor(model => model.toDate)
        @Html.ValidationMessageFor(model => model.toDate)
    </div>

    <div class="editor-label">
        <label>Staff:</label>
    </div>
    <div class="editor-field">
        @Html.DropDownList("staffID", "Select Staff")
        @Html.ValidationMessageFor(model => model.staffID)
    </div>

   <button type="submit">Reserve</button>
}
这给了我以下错误:

Store update, insert, or delete statement affected an unexpected number of rows (0).
人们建议我将
@Html.HiddenFor(model=>model.reservationID)
添加到我的视图中

但是
model.reservationID
为空

我怎样才能解决这个问题?
请帮助

您不应该在视图之间传递数据传输对象。使用ToModel方法创建视图模型,该方法将返回所需的DTO。添加到上下文中,您不需要更改状态

用这个

context.Reservation.Add(res);
context.SaveChanges();
移除

context.Entry(res).State = EntityState.Modified;
如果您正在尝试更新,请从数据库中提取记录,进行更改并调用SaveChanges

context.Entry(res).State=EntityState.Modified

此行不是必需的-如果您手动将某个内容标记为已修改,则会出现此行。由于您要添加一个全新的实体,正确的值应该是添加的
,默认情况下该值应该在那里


似乎是它试图执行
更新
而不是
插入
,这导致了该错误。

您应该在get方法中返回一个
保留
context.Entry(res).State = EntityState.Modified;