DataContext Violation UNIQUE KEY
От: Deskny  
Дата: 25.09.08 14:43
Оценка:
В процессе работы с линком возник вопрос, найти ответ самостоятельно не получилось, есть надежда, что форумчане помогут...
Cитуация:
В БД существует таблица организаций, имеющая ключ уникальности по полю "Наименование"
Работаю с данными через Linq to SQL.

Выполняю следующий код:

//удаляю организацию с именем MyOrg
Organization type = (from tbl in context.Organizations
where tbl.Name == "MyOrg"
select tbl).Single();
context.Organizations.DeleteOnSubmit(type);

//Добавляю новую организацию с именем MyOrg
Organization type1 = new Organization();
type1.Name = "MyOrg";
context.Organizations.InsertOnSubmit(type1);

//Сохраняю изменения в БД
context.SubmitChanges();

В момент вызова SubmitChanges получаю SqlException "Violation of UNIQUE KEY constraint".
Выяснилось, что при накате изменений в БД контекст первым делом вызывает insert и, естественно,получает эксепшн, т.к. в этот момент в базе оказываются две записи с именем MyOrg.

Советы накатывать SubmitChanges последовательно не принимаются — на самом деле логика работы намного сложнее, чем приведена в тестовом примере, и изменить порядок работы я не могу.

Может быть как-то можно указать последовательность выполнения операций на БД (сначала delete, потом submit) или еще как-то разрулить ситуацию
Как вариант можно удалить нафик ключ уникальности, но как-то неправильно делать дизайн базы исходя из возможностей инструмента...
Но, наверно, придется удалить...
linq datacontext
Re: DataContext Violation UNIQUE KEY
От: IvanDunaev  
Дата: 25.09.08 15:04
Оценка:
Здравствуйте, Deskny, Вы писали:

D>В момент вызова SubmitChanges получаю SqlException "Violation of UNIQUE KEY constraint".

D>Выяснилось, что при накате изменений в БД контекст первым делом вызывает insert и, естественно,получает эксепшн, т.к. в этот момент в базе оказываются две записи с именем MyOrg.

для начала убедитесь что в ChangeSet.Inserts и ChangeSet.Deletes находится именно то, что ожидается
Re[2]: DataContext Violation UNIQUE KEY
От: Deskny  
Дата: 26.09.08 06:20
Оценка:
Да, с коллекциями все в порядке — по одной записи в inserts и deletes.
Есть страшное подозрение, что это бага в контексте...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.