【问题标题】:Updating List of Objects Saving to Database更新保存到数据库的对象列表
【发布时间】:2013-01-25 21:01:18
【问题描述】:

我有一个包含两个对象的列表,我想更新每个对象中的同一列并将其保存到数据库中。我已经尝试过了,但它不起作用。正确的对象在列表中,因为我设置了一个下拉框来检查它们是否存在。

List<Fighter> item = fight.Fighters.ToList<Fighter>();
item.ToList().ForEach(c => c.Draw++);
            db.SaveChanges();

有什么想法吗?


我在战斗和战士之间有多对多的关系,两个战士属于一个战斗。

编辑:

[HttpPost]
    public ActionResult HandleResult(Fight fight)
    {

        List<Fighter> item = fight.Fighters.ToList<Fighter>();

        ... //Code here that isnt related

        foreach (var i in item)
                {
                    item.ToList().ForEach(c => c.Draw++);
                    db.Fighters.Add(i);
                }

                db.SaveChanges();
     }

所以你可以在 httpPost 中看到,我想获取参与战斗的战士,并将 1 加到战士实体中的属性 Draw。

【问题讨论】:

  • 什么是fight.Fighters?它与db(我假设是数据库上下文)有什么关系吗?
  • Fight 是另一个与战士有多对多关系的实体。

标签: c# asp.net-mvc model-view-controller asp.net-mvc-4


【解决方案1】:

您正在尝试保存它而不实际将其添加到数据库表中。看起来您正在使用实体框架。假设是这样,您将执行以下操作。

List<Fighter> item = db.fight.Fighters.ToList<Fighter>();
item.ToList().ForEach(c => c.Draw++);
foreach (var i in item)
{
    db.fight.Fighters.AddObject(i);
}

db.SaveChanges();

编辑:更新语法。这是不正确的。

【讨论】:

  • 感谢您的回复,我知道我没有正确保存它,这样做我得到以下错误 Error 1 'System.Data.Entity.DbSet' does not包含“AddRange”的定义,并且没有扩展方法“AddRange”接受“System.Data.Entity.DbSet”类型的第一个参数(您是否缺少 using 指令或程序集引用?)
  • @RobertPallin 抱歉,语法不正确。您应该能够遍历循环,然后为循环中的每个项目调用 AddObject ,将其添加到您的数据库上下文中;
  • 仍然没有。再次感谢您的帮助。找不到 AddObject,我尝试了一个简单的 Add ,但这也不起作用。此外,“战斗”是另一个实体的实例,它与 Fighters 具有多对多关系,如果这会产生影响的话。
  • @RobertPallin 你能发布更多关于这个的代码吗?我在想,虽然我的回答是正确的做法,但它的周围可能比最初推断的要多。
  • 已编辑问题,如果您仍然无法理解我要做什么,我会更详细地解释它,非常感谢您的帮助。
【解决方案2】:

在执行 db.SaveChanges() 之前,您必须执行类似 db.Add(object) 的操作;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-10
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多