Ну IMHO для случая, когда надо выбрать/записать данные в 1-2-3 таблицы LINQ 2 SQL предпочительнее.
В том виде, в котором существует LINQ 2 SQL, его достаточно для большинства простых задач. Собственно, видимо поэтому его больше и не развивают. И не надо :-)
спасибо за пример. надо будет глянуть, как это в devart linq to oracle sql реализовано…
из своего опыта скажу, что вариант с версиями наиболее интересен тем, что объединяет в себе оптимальную производительность, простоту и надежность оптимистической блокировки.
Очень хорошо написано, действительно для многих полезная статья получилась.
Одно только замечание — править значения в атрибутах все-таки лучше внутри .dbml или в дизайнере, поскольку при редактировании непосредственно файла .designer.cs ваши изменения могут затереться при изменении схемы DBML.
Спасибо автору :)
Мучался из-за появляющегося конфликта при обновлении данных в двух таблицах одновременно (в БД еще триггер есть, который пока нельзя выпилить). как оказалось, конфликт был из-за атрибута IsVersion=true на поле одного из объектов.
При этом, что, цуко, странно, в объекте ObjectChangeConflict коллекция MemberConflicts была пустая, и непонятно было на каком именно поле конфликт произошел.
Если это ожидаемое поведение (пустая коллекция MemberConflicts при конфликте по версии) при возникновении исключения ChangeConflictException, то можно было бы добавить в статью в раздел про isVersion фразу про это :)
LINQ to SQL и конфликты параллельного доступа