Я пытаюсь приспособить Linq к Sql в дизайн N-уровня.Я реализую параллелизм, предоставляя оригинальные значения при присоединении объектов к контексту данных.При вызове SubmitChanges и просмотре сгенерированных скриптов на профилировщике сервера sql я вижу, что они генерируются правильно.Они включают в себя предложения where, которые проверяют все свойства объекта (все они помечены UpdateCheck.Always).
Результат соответствует ожидаемому, то есть строки не обновляются при обновлении и не удаляются при удалении.И все же я не получаю никаких исключений.Разве это не должно вызывать исключение ChangeConflictException?
Для ясности приведу схему и последовательность выполнения тестов, которые я выполняю: у меня есть консоль клиента и консоль службы, которые общаются друг с другом через WCF с использованием WsHttpBinding.
- Клиент запрашивает данные у службы
- Служба создает экземпляр текста данных, извлекает данные, удаляет контекст, возвращает данные клиенту.
- Клиент вносит изменения в возвращаемые данные.
- Клиент запрашивает обновление измененных данных у службы.
5a.Служба создает текстовый текст, присоединяет объекты и ...
5b.Я приостанавливаю выполнение и изменяю значения в базе данных, чтобы вызвать конфликт изменений
5c.Сервис звонков SubmitChanges.
Вот код для шага 5, немного очищенный для ясности:
public void UpdateEntities(ReadOnlyChangeSet<Entity> changeSet)
{
using (EntityDataContext context = new EntityDataContext())
{
if (changeSet.AddedEntities.Count > 0)
{
context.Entities.InsertAllOnSubmit(changeSet.AddedEntities);
}
if (changeSet.RemovedEntities.Count > 0)
{
context.Entities.AttachAll(changeSet.RemovedEntities, false);
context.Entities.DeleteAllOnSubmit(changeSet.RemovedEntities);
}
if (changeSet.ModifiedRecords.Count > 0)
{
foreach (var record in changeSet.ModifiedRecords)
{
context.Entities.Attach(record.Current, record.Original);
}
}
// This is where I pause execution and make changes to the database
context.SubmitChanges();
}
}
Я использую некоторые классы для отслеживания изменений и сохранения оригиналов, как вы можете видеть.
Любая помощь приветствуется.
РЕДАКТИРОВАТЬ: У меня нет проблем со вставками.Я только включил код, который вызывает InsertAllOnSubmit для полноты.