gpt4 book ai didi

c# - 在 DataContext 上调用 SubmitChanges 不会更新数据库

转载 作者:行者123 更新时间:2023-11-30 15:10:57 25 4
gpt4 key购买 nike

在 C# ASP.NET MVC 应用程序中,我使用 Link to SQL 为我的应用程序提供数据。我有这样的简单数据库模式: My database

在我的 Controller 类中,我引用了这个名为 Model 的数据上下文(如您在图片右侧的属性中所见),如下所示:

private Model model = new Model();

我在我的页面上呈现了一个系列表(列表)。它呈现正确,我能够添加删除功能来删除系列,如下所示:

public ActionResult Delete(int id) {
model.Series.DeleteOnSubmit(model.Series.SingleOrDefault(s => s.ID == id));
model.SubmitChanges();
return RedirectToAction("Index");
}

适当的操作链接如下所示:

<%: Html.ActionLink("Delete", "Delete", new { id=item.ID })%>

Also create(以类似方式实现)工作正常。但是编辑不起作用。我的编辑看起来像这样:

public ActionResult Edit(int id) {
return View(model.Series.SingleOrDefault(s => s.ID == id));
}

[HttpPost]
public ActionResult Edit(Series series) {

if (ModelState.IsValid) {
UpdateModel(series);

series.Title = series.Title + " some string to ensure title has changed";
model.SubmitChanges();

return RedirectToAction("Index");
}
return View(series);
}

我已控制我的数据库正确设置了主键。我调试了我的应用程序,发现一切都按预期工作,直到 model.SubmitChanges(); 行。此命令不会对数据库应用 Title 属性(或任何其他)的更改。

请帮忙。

编辑:如果我添加此行: model.Series.Attach(series); 就在 model.SubmitChanges(); 之前,没有任何变化 - 编辑仍然不会反射(reflect)到数据库中。作为参数传递给 Edit 方法的实例已附加到数据上下文 model

编辑:属于方法编辑的 View 代码:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
Inherits="System.Web.Mvc.ViewPage<TVSeriesInfoApp.Models.Series>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Edit
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<h2>Edit</h2>

<% using (Html.BeginForm()) {%>
<%: Html.ValidationSummary(true) %>

<fieldset>
<legend>Fields</legend>

<div class="editor-label">
<%: Html.LabelFor(model => model.Title) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Title) %>
<%: Html.ValidationMessageFor(model => model.Title) %>
</div>

<div class="editor-label">
<%: Html.LabelFor(model => model.Seasons) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Seasons) %>
<%: Html.ValidationMessageFor(model => model.Seasons) %>
</div>

<div class="editor-label">
<%: Html.LabelFor(model => model.Stars) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Stars) %>
<%: Html.ValidationMessageFor(model => model.Stars) %>
</div>

<p>
<input type="submit" value="Save" />
</p>
</fieldset>

<% } %>

<div>
<%: Html.ActionLink("Back to List", "Index") %>
</div>

</asp:Content>

最佳答案

这就是我们的编辑操作的样子(针对您的模型进行了调整):

[HttpPost]
public ActionResult Edit(int id, Series series)
{
Series updatingSeries = model.Series.Single(s => s.ID == id);

try
{
TryUpdateModel(updatingSeries);
model.SubmitChanges();

return RedirectToAction("Details", new { id = updatingSeries.ID });
}
catch
{
return View(updatingSeries);
}
}

这可能是因为 ModelState 在某些情况下可能无效。你对 View 做了什么吗?您也可以在这里发布您的查看代码吗?

关于c# - 在 DataContext 上调用 SubmitChanges 不会更新数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2904138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com