Прежде всего, вы должны выполнить все эти задачи в фоновом потоке, и при разборе, если это возможно, используйте HashMap<Key,Value>
, у него есть методы, подобные hashmap.get("key")
, которые будут получать значения без использования цикла for, или вы также можете использовать arraylist
из которого вы также можете получить значения без использования цикла for.
В Вашем методе SaveOrder Вы всегда создаете новый объект ПОРЯДКА. Необходимо изменить это так, чтобы если порядок. IsNew является ложью, он получает существующий от DB и обновляет его вместо этого.
public void SaveOrder(Order order)
{
ORDER dbOrder;
if (order.IsNew)
{
dbOrder = new ORDER();
dbOrder.O_ID = order.ID;
}
else
{
dbOrder = (from o in db.ORDERS where o.O_ID == order.ID select o).Single();
}
dbOrder.O_SomeField1 = order.SomeField1;
dbOrder.O_SomeField2 = order.SomeField2;
dbOrder.O_DateCreated = order.DateCreated;
dbOrder.O_DateModified = order.DateModified;
if (order.IsNew)
db.ORDERs.InsertOnSubmit(dbOrder);
db.SubmitChanges();
}
Я думаю, что у Вас есть проблема, что Ваш объект отсоединяется от Вашего контекста.
Необходимо попытаться присоединить объект назад к контексту, если Вы хотите обновить. Оборотная сторона LINQtoSQL - то, что для прикрепления Вам будет нужно исходное состояние объекта, когда это было отсоединено...
Другое решение состоит в том, чтобы повторно получить Ваш объект от контекста и скопировать все данные из Вашего объекта в параметре. Это сделает, пока у Вас не будет более сложных объектов.
Какой сказанный tvanfosson.
Я был бы, точно так же, как, чтобы добавить, что я использую логику, где, если идентификатор равняется значению по умолчанию (0 или Пустой при использовании гуидов), то я принимаю, это является новым. Иначе, если мне передали идентификатор в, затем я иду, получают существующий объект и обновляют его.