Во-первых, NoLock (и ReadUncommitted) чрезвычайно опасны.Подумайте, вы используете транзакции в основном потому, что хотите, чтобы ваши данные были согласованными.Используя NoLock, вы разрешаете грязное чтение ваших данных.Скажем, в вашем приложении очень возможно, что вы читаете наполовину обновленные или наполовину вставленные данные.Ваше приложение (или пользователи) будут принимать решения на основе противоречивых данных.
Если вы пойдете в бизнес и просто спросите, могут ли данные, на которых работает ваше приложение, быть противоречивыми, я считаю, что ответ будет строго НЕТ.Так что просто не идите по этому пути, мы были там, он никуда не кончается.
Теперь о порядке.Насколько я понимаю, теоретически не гарантируется, будет ли он всегда иметь один и тот же порядок или нет, но практически это вероятно будет (поскольку ORM обычно имеют только один алгоритм для перечисления сущностей и обнаружения изменений).Но это не очень помогает, потому что даже перечисляет сущности (чтобы найти, что нужно сохранить) в том же порядке, количество типов сущностей может быть разным .Скажем, это A и D в одном сценарии и A, B, D в другом и A, C, D в другом.Теперь это может зависеть от отношений между этими объектами.Скажем, C зависит от D, поэтому фактический порядок будет на самом деле A, D, C, а не A, C, D (и даже здесь не указано, что это не будет D, C, A).Поэтому ретрансляция по этому заказу не вариант.Единственное, что вы можете сделать, чтобы убедиться, что порядок - это вызывать .SaveChanges () после каждого шага, что является неприятным.
Да, вы можете использовать уровень изоляции Snapshot (их два, в основном, любой, попробуйте SnapshotЧитайте совершено).Это значительно уменьшит количество взаимоблокировок в вашей системе, но у этого метода есть свои недостатки.
Чтобы более или менее правильно решить проблему, я бы порекомендовал вам четко определить границы транзакций в вашей системе.Какая часть системы «владеет» какими данными?Какие данные должны быть изменены в соответствии с другими данными?Тогда вы сможете сказать, что «разрешены только эти транзакции» и «только эта конкретная часть моей системы может касаться этих конкретных данных».
Это трудно, особенно в начале, когда у вас естьбольшая база данных, которая читается и пишется хаотично, все отовсюду.Но это приводит к созданию более стабильной, управляемой и обслуживаемой системы.
Кстати, у Уди Даана есть интересное сообщение в блоге об этом: Несоответствующие данные, низкая производительность или SOA - выберите один