微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 使用TryUpdateModel方法在ASP.NET MVC 3中使用EntityFramework更新多个对象

在尝试通过Entity Framework更新数据时,我正在努力使用ASP.NET MVC3.过程如下:

我有这个型号:

public class Bet
    {
       public string BetID { get; set; }
       public int FixtureID { get; set; }
       public string Better { get; set; }
       public int GoalsHome { get; set; }
       public int GoalsGuest { get; set; }

       public virtual Fixture { get; set; }

    }

在控制器中,我通过where语句过滤表,只获得与用户匹配的entrys:

[HttpGet]
    public ActionResult Index()
    {
        var user = User.Identity.Name;
        var model = _db.Bets.Where(t => t.Better == user);

        return View(model);
    }

View是两部分,一部分负责表头,另一部分列出用户的所有赌注:

<fieldset>
    <legend>Bets</legend>
    <table>
        <tr>
            <th>
                Kickoff
            </th>
            <th>
                Home Team
            </th>
            <th>
                Guest Team
            </th>
            <th>
                Group
            </th>
            <th>
                Bet
            </th>
        </tr>
        @Html.EditorFor(m => m)  //this is resolved in an self made EditorTemplate
  </table>

EditorTemplate:

@model Betting.Models.Bet
<tr>
<td>
    @Html.displayFor(modelItem => Model.Fixture.Kickoff)
</td>
<td>
    @Html.displayFor(modelItem => Model.Fixture.HomeTeam)
</td>
<td>
    @Html.displayFor(modelItem => Model.Fixture.GuestTeam)
</td>
<td>
    @Html.displayFor(modelItem => Model.Fixture.Group)
</td>
<td>
    @Html.TextBoxFor(modelItem => Model.GoalsHome,new { style = "width: 30px" }):
    @Html.TextBoxFor(modelItem => Model.GoalsGuest,new { style = "width: 30px" })
</td>
    @Html.HiddenFor(modelItem => Model.FixtureID)
</tr>

回到控制器,我尝试更新模型:

[HttpPost]
    public ActionResult Index(FormCollection collection)
    {
        var user = User.Identity.Name;
        var model = _db.Bets.Where(t => t.Better == user);
        TryUpdateModel(model);
        _db.SaveChanges();

        return RedirectToAction("Index");
    }

这绝对没有.实体框架根本不会更新数据库.我甚至将表格分开,以便html文件中的结果下注标签可以区分(注意名称值之前的[index]:

<input data-val="true" data-val-number="The field GoalsHome must be a number." data-val-required="The GoalsHome field is required." name="[1].GoalsHome" style="width: 30px" type="text" value="3" />:
 <input data-val="true" data-val-number="The field GoalsGuest must be a number." data-val-required="The GoalsGuest field is required." name="[1].GoalsGuest" style="width: 30px" type="text" value="0" />

有人可以告诉我为什么实体框架没有更新数据库?对象映射有问题吗?

解决方法

我之前遇到过同样的问题. MSDN在这个问题上可能会让人感到困惑,但是页面的中间部分说明如果你创建没有proxycreationenabled的POCO实体,你必须在调用savechanges之前调用detectchanges.

TryUpdateModel(model);
_db.DetectChanges();
_db.SaveChanges();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐