2010-12-08 2 views
2

Мне очень нужна ваша помощь. Я хотел бы обновить объект, созданный в другом datacontext; Вот мой код. Вставить заявление работает хорошо, но я не могу написать код для обновленияобъект обновления, созданный в другом datacontext

var dataContext = new ReconNewDataContext();   
     if (Id == 0) 
     { 
      var item = this; 
      dataContext.RequestIO.InsertOnSubmit(item); 
      dataContext.SubmitChanges(); 
      Id = item.Id; 
     } 
     else 
     { 
      var item = this; 
      //update object 
     }   

Я прочитал Linq2SQL: Update object not created in datacontext

Я пытался использовать .Attach (это) .Attach (это, правда) .Attach (это, oldObjectFromBase), но всегда у меня есть ошибки.

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

Есть ли какой-нибудь «красивый» метод для обновления объекта, созданного в другом datacontext?

+0

Я только что опубликовал аналогичный вопрос, потому что я видел этот вопрос как минимум 20 раз, и нет единого «правильного» ответа. Нет «прекрасного» метода, который я нашел еще. Это заставляет нас а) начать немного сумасшедшим и б) начать сомневаться в мудрости использования Linq To Sql в моем репозитории. Является ли EF лучше при обновлении отключенных данных? Есть ли лучший подход, который я могу использовать в своих репозиториях? Мне жаль, что у меня не было ответа для вас, но я все еще ищу его. :( – beaudetious 2011-01-02 05:06:42

+0

Я задаю себе тот же вопрос ... Nhibernate облегчил бы мою жизнь ... – Haroon 2011-03-16 23:21:24

ответ

0

Проверить эту статью: http://omaralzabir.com/linq_to_sql__how_to_attach_object_to_a_different_data_context/

Кроме того, в вашем примере, для обновления, попробуйте сделать:

var item = new ObjectBeingUpdated(); 
//copy over properties from old object to new object, make sure pk's match 

//Attach this new object 

Нечто подобное работал для моего коллеги, я считаю.

UPDATE: Проверьте это для получения дополнительной информации о прикрепиться: http://blogs.msdn.com/b/dinesh.kulkarni/archive/2007/10/08/attach-if-you-have-something-detached.aspx

+0

// копирование свойств из старого объекта в новый объект, убедитесь, что соответствие pk Как я уже говорил, это будет работать, но это не является «красивым» способом. Как насчет 42 полей в таблице? Конечно, я могу использовать system.reflection. Но есть ли какой-нибудь «красивый» метод для обновления объекта, созданного в другом datacontext? – takayoshi 2010-12-08 19:34:03

0

Вы можете использовать следующую схему:

  1. Fetch существующий объект из хранилища
  2. Использование AutoMapper для копирования свойств
  3. Сохранить ваш объект обратно.
Смежные вопросы