LINQ to SQL Присоединение коллекции объектов из файла XML База данных - PullRequest
1 голос
/ 07 марта 2012

Я разрабатываю приложение HRM для импорта и экспорта данных XML из базы данных. Приложение получает экспортированные данные XML для записи сотрудника. Я импортировал xml-файл, используя linq to xml, где я преобразовал xml в соответствующие объекты. Затем я хочу прикрепить (обновить) объекты сотрудника.

Я пытался использовать

//linqoper class for importing xml data and converts into IEnumerable employees object.
  var emp = linqoper.importxml(filename.xml);
  Using (EmployeedataContext  db = new EmployeedatContext){
  db.attachAllonSubmit(emp);
  db.submitchange();
 }

Но я получил ошибку “An entity can only be attached as modified without original state if it declares as version member or doesn't have an update check policy”.

У меня также есть возможность получить каждого сотрудника и присвоить значение новому сотруднику из данных XML с использованием этого формата.

//import IEnumerable of Employee objects
var employees = = linqoper.importxml(filename.xml)
using(Employeedatacontext db = new Employeedatacontext){
foreach(var empobj  in employees)
{
 Employee emp = db.Employee.where(m=>m.id==empobj.Id);
emp.FirstName=empobj.FirstName;
emp.BirthDate=empobj.BirthDate;
//….continue 
}
db.submitChanges();
}

Но проблема с вышесказанным в том, что мне приходится перебирать все объекты сотрудников, что очень утомительно. Так есть ли другой способ, я мог бы присоединить (обновить) сущность сотрудника в базе данных, используя LINQ to SQL.

Я видел несколько похожих ссылок на SO, но ни одна из них, похоже, не помогает.

/822229/linq-to-sql-prisoedinit-obnovit-obekt-entity

Ответы [ 2 ]

1 голос
/ 07 марта 2012

Когда linq-to-sql сохраняет изменения в базе данных, он должен знать, что свойства объекта были изменены. Он также проверяет, было ли потенциально конфликтующее обновление базы данных выполнено во время обновления (оптимистичный параллелизм).

Для обработки этих случаев при присоединении LINQ-to-SQL требуются две копии объекта. Один с исходными значениями (как присутствует в БД) и один с новыми, измененными значениями. Существует также более продвинутый механизм, включающий член версии, который отображается в столбец rowversion.

Линк-к-SQL способ обновления набора данных состоит в том, чтобы сначала прочитать все данные из базы данных, затем обновить объекты, извлеченные из базы данных, и, наконец, вызвать SubmitChanges(). Это был бы мой первый подход в вашей ситуации.

Если вы испытываете проблемы с производительностью, то пришло время выйти за пределы набора инструментов linq-to-sql. Решение с более высокой производительностью заключается в загрузке новых данных в отдельную промежуточную таблицу (для лучшей производительности используйте массовую вставку). Затем выполните команду SQL или хранимую процедуру, которая выполняет фактическое объединение данных. Предложение SQL Merge отлично подходит для такого рода обновлений.

0 голосов
/ 29 марта 2013

LINQ to SQL является правильным ORM, но если вы хотите взять под контроль создание / обновление / удаление в ваших руках;чем вы можете попробовать несколько простых ORM, которые просто предоставляют способы выполнения операций CRUD.Я могу порекомендовать один http://crystalmapper.codeplex.com,, он простой, но мощный.

Почему CrystalMapper?

Я создал это для крупной системы финансовых транзакций с большим количеством операций вставки и обновления.Что мне нужно, так это скорость и управление вставкой / обновлением, обслуживающие сложные бизнес-сценарии ... использование нескольких таблиц только для одной транзакции.

Когда я использую это для использования в социальной платформе обработки текста, она также очень хорошо работает там.,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...