【问题标题】:How to save changes in Linq-to-SQL?如何保存 Linq-to-SQL 中的更改?
【发布时间】:2010-09-22 04:56:31
【问题描述】:

所以,这是我对这个常见问题的独特见解。

我进行查询,获取我的对象,然后将对象传递到一个表单中,在该表单中它使用来自对象的数据填充表单(这不是通过引用传递的)。

然后我编辑被查询的对象的值(通过表单),然后返回一个从表单中的值构造的新对象。

然后我想将其更新到数据库中。 Attach 什么都不做(运行但不更新)。 SubmitChanges 也不做任何事情(一起使用时两者都不做)。

我错过了什么?

更新:这是我正在使用的代码:

// In constructor
_dataMap = new DataMapDataContext();
_addresses = _dataMap.AddressItems
         .Where(address => address.InsertUserName == _currentUser.Name).ToList();



public void EditButtonClick()
{
    using (AddAddressForm form = new AddAddressForm(_addresses[_currentAddress]))
    {
        form.Text = "Edit Address";
        if (DialogResult.OK == form.ShowDialog())
        {
            _addresses[_currentAddress] = form.Item;
            _dataMap.SubmitChanges();
            DisplayItem();
        }
    }
}

【问题讨论】:

  • 老兄,你昨天问了这个问题,我回答了(并且被勾选正确)-stackoverflow.com/questions/3756890/…这是什么问题?
  • 另外,发布您尝试过的代码,但它不起作用 - 否则人们会“猜测”您已经/尚未完成的事情 - 以下答案就是一个示例
  • @RPM1984 - 是的,它们非常相似。但这一个是插入的更新。 (我认为 InsertOnSumbit 不适用于更新的项目)。
  • 所以让我做对了,您要在构造函数中更新 DataContext,将其设置为公共实例变量,然后尝试在单击事件中对其添加一些更改?真的没有意义。你在哪里处理上下文?什么是 AddAddressForm (以及为什么在使用中)。 @Naaeem 的回答基本正确(除了代码应该用 using 包装)

标签: c# linq-to-sql


【解决方案1】:

您需要从数据库中获取记录,更新它的值,然后调用SubmitChanges()

using(MyDataContext db = new MyDataContext())
{
    // get the record
    Product dbProduct = db.Products.Single(p => p.ID == 1);

    // set new values
    dbProduct.Quantity = 5; 
    dbProduct.IsAvailable = false;

    // save them back to the database
    db.SubmitChanges();
}

【讨论】:

  • 您在哪里使用/处置?啧啧,啧啧。 =)
  • 注意虽然这是一种简洁的方法,但应该注意的是,如果您在 LinqPad 中创建新查询,您也可以省略数据上下文并输入Main 方法:var dbProduct = Products.Single(p => p.ID == 1); dbProduct.Quantity = 5; SubmitChanges(); - 对于快速更新查询很有用。 注意:这仅在您事先在 LinqPad 查询下拉列表中选择了数据库时才有效。
【解决方案2】:

事实证明我几乎做对了所有事情。

我只需要通过引用传入我正在编辑的对象。这样,当它被更改时,返回的不是一个新对象,而是同一个对象(Linq-to-SQL 已经知道。)

这些是上面代码中发生变化的两行:

AddressItem itemToEdit = _addresses[_currentAddress];
using (AddAddressForm form = new AddAddressForm(ref itemToEdit))

【讨论】:

  • @msarchet - 这只是一个演示,所以现在不那么重要,但是为了将来参考,为什么会出错?我不是 Linq-to-SQL 的大用户,当我使用它时,我通常让它调用存储过程来进行插入和更新。所以我对 Linq-To-SQL 的这方面并不熟悉。如果您有更好的方法与具有数据上下文和执行更新的查询的类不同,然后将其发布为答案,我会选择它。如果没有,那好吧....
  • 这么多的反对票,没有解释为什么这很糟糕。必须爱懦弱的反对者。
  • 我看不出这如何回答“如何在 Linq-to-SQL 中保存更改?”这个问题。 - SubmitChanges() 是正确的调用方法。但是您需要先查询,然后对查询的对象进行更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多