У меня есть сущность (LONGFORM), которая передается через AJAX на клиентскую сторону.Эта сущность модифицируется на клиенте и отправляется обратно на сервер для обновления в базе данных.Вот код на стороне сервера:
[System.Web.Services.WebMethod()]
public static LONGFORM SendDataToClient(int id)
{
DBDataContext _db = new DBDataContext();
LONGFORM _lf = _db.LONGFORMs.SingleOrDefault(l => l.IDLONGFORM == id);
return _lf;
}
[System.Web.Services.WebMethod()]
public static void SaveDataFromClient(LONGFORM _lfFromClient)
{
DBDataContext _db = new DBDataContext();
//_db.LONGFORMs.InsertOnSubmit(_lfFromClient);
_db.LONGFORMs.Attach(_lfFromClient);
_db.SubmitChanges();
}
Но я не могу «обновить» _lfFromClient (LONGFORM) обратно в БД!Если я использую InsertOnSubmit, запись будет вставлена (несмотря на то, что LINQ должен увидеть, что поле PK уже существует в таблице, и, таким образом, попытаться обновить).Если я использую подход «вложение», ничего не происходит.
Итак, как правильно обновить сущность, не связанную с текущим DataContext?
Спасибо .-
РЕДАКТИРОВАТЬ: Мне удалось обновить значения в LONGFORM, добавив эту строку непосредственно перед SubmitChanges (): _db.Refresh (System.Data.Linq.RefreshMode.KeepCurrentValues, _lfFromClient);
Теперь проблема в том, что дочерние объекты внутри _lfFromClient не будут обновляться: (
РЕДАКТИРОВАТЬ 2: Хорошо, я нашел решение, так что вот ответ в надежде, что он поможет кому-то с той же проблемой.Хитрость заключается в том, чтобы также присоединить все дочерние объекты, потому что LINQ не будет делать это автоматически. В этом примере FAMILYMEMBER - это коллекция дочерних объектов LONGFORM, которая также получает обновление на стороне клиента. Обратите внимание на «AttachAll», поскольку LONGFORM -> FAMILYMEMBER - это единица длямногие отношения:
[System.Web.Services.WebMethod()]
public static void SaveData(LONGFORM _lfFromClient)
{
DBDataContext _db = new DBDataContext();
_db.LONGFORMs.Attach(_lfFromClient);
_db.FAMILYMEMBERs.AttachAll(_lfFromClient.FAMILYMEMBERs);
_db.Refresh(System.Data.Linq.RefreshMode.KeepCurrentValues, _lfFromClient);
_db.Refresh(System.Data.Linq.RefreshMode.KeepCurrentValues, _lfFromClient.FAMILYMEMBERs);
_db.SubmitChanges();
}