Поддерживает ли LINQ to SQL только одну единицу работы, или я могу сохранить контекст и выполнить следующую операцию? - PullRequest
0 голосов
/ 05 февраля 2011

У меня есть приложение для Windows.Я пытаюсь вставить запись через DataContext.Имеет уникальный идентификатор в таблице.Даже я выполняю триггер после вставки.Поэтому я делаю запрос на выбор в конце триггера, чтобы получить номер автогенератора и избежать ошибки автосинхронизации.Поскольку это приложение для Windows, я могу хранить контекст в течение длительного времени.Когда я создаю новый объект (например, порядок) и выполняю ту же предыдущую операцию, после операции SubmitChanges он показывает, что не может иметь дубликат ключа.Почему я не могу использовать этот же контекст для вставки второй записи?Или мне нужно создать новый Контекст для вставки новой Записи? (Приходит ли сюда эта Концепция Единицы работы?).Создание нового контекста - плохая идея, так как мне нужно снова загрузить все данные ..

Есть мысли?

Пример кода, объясняющего мою ситуацию:

CallCenterLogObjCotext = (CallCenterLogObjCotext == null ? (new CallcenterLogContext) : (CallCenterLogObjCotext));

 CallDetail newCallDetailsOpenTicket = new CallDetail();

 newCallDetailsOpenTicket.CallPurpose = (from callpuposelist in CallCenterLogObjCotext.CallPurposes
   where callpuposelist.CallPurposeID == ((CallPurpose)(cbcallpurpose.SelectedItem)).CallPurposeID
   select callpuposelist).FirstOrDefault();

Многонастройки вроде этого ...

CallCenterLogObjCotext.CallDetails.InsertOnSubmit(newCallDetailsOpenTicket);
CallCenterLogObjCotext.SubmitChanges();

Как я уже упоминал выше, это нажатие на кнопку Open Ticket в форме окна.Я изменяю значения fname, lname и всего в текстовых полях, доступных в этой форме, и нажимаю ту же кнопку.Так что он будет вызывать тот же метод снова.Я получаю указанную ниже ошибку:

System.Data.Linq.DuplicateKeyException: Невозможно добавить объект с ключом, который уже используется.

1 Ответ

1 голос
/ 05 февраля 2011

Вы можете вставить более одной строки с одним и тем же контекстным объектом, см. http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx, http://msdn.microsoft.com/en-us/library/bb425822.aspx, и другие многочисленные онлайн-примеры.Проблема дублированного ключа может быть проблемой конфигурации linq to sql или ошибкой целостности базы данных, например, если у вас есть естественный первичный ключ в таблице и вы пытаетесь вставить строку с тем же естественным первичным ключом более одного раза.1005 *

...