Сохранить изменения в Linq-to-SQL - PullRequest
3 голосов
/ 22 сентября 2010

Итак, вот мой, надеюсь, уникальный пример решения этой распространенной проблемы.

Я выполняю свой запрос, получаю свои объекты, затем передаю объект в форму, где он заполняет форму данными из объекта (этоне передается по ссылке).

Затем я редактирую значения запрашиваемого объекта (через форму), а затем возвращаю новый объект, созданный из значений в форме.

Затем я хочу обновить это в базе данных.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();
        }
    }
}

Ответы [ 2 ]

6 голосов
/ 22 сентября 2010

Вам нужно получить запись из базы данных, обновить ее значения и затем вызвать 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();
}
0 голосов
/ 22 сентября 2010

Оказывается, я все делал правильно.

Мне просто нужно было передать объект, который я редактировал, по ссылке. Таким образом, когда он изменился, это был не новый объект, который был возвращен, а тот же (о котором Linq-to-SQL уже знал).

Это две строки из кода выше, которые были изменены:

AddressItem itemToEdit = _addresses[_currentAddress];
using (AddAddressForm form = new AddAddressForm(ref itemToEdit))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...