Может ли база данных или модель Entity Framework перейти в несогласованное состояние? - PullRequest
0 голосов
/ 19 августа 2011

Я создаю приложение, используя EF 4.1, и мне было интересно, может ли базовая база данных, обслуживающая приложение EF, перейти в несовместимое состояние. Я имею в виду, что в случае исключения во время создания / изменения / удаления сущностей, EF может быть поврежден и оставить некоторые значения, которые не должны быть равными NULL, и сохранить некоторую часть базы данных. (особенно в случае исключения в контексте EF).

Позвольте мне привести пример: У меня есть два независимых типа объекта, A и B, и A и B имеют связь 1-1. Я создаю объект A, и при создании B возникает проблема, и возникает исключение. После этого метод контекста SaveChanges вызывается в любом случае. (это только один пример, могут быть другие типы ассоциаций, иерархии наследования и т. д.) Возможно ли возникновение повреждения или существует уровень, который предотвратит несогласованность. Там определенно должно быть, с ограничениями сервера SQL и проверкой нуля. Но я запускаю базу данных, и иногда , я получаю исключение, сообщающее, что что-то (ассоциация), что не может быть нулевым , как определено как не обнуляемое, на самом деле является нулевым, и как я не Если обработанное значение равно нулю (представьте, что в предыдущем примере ссылка A.B равно нулю), мое приложение / сайт аварийно завершается. Что может быть причиной? Есть нет других приложений или экземпляров, которые каким-либо образом обращаются к базе данных. Подобные угловые случаи происходили со мной в последнее время, и мне было интересно узнать причину.

1 Ответ

1 голос
/ 20 августа 2011

DbContext.SaveChanges () переносит сгенерированные операторы SQL в транзакцию. Так что либо все совершается, либо откатывается. Возможно, вы захотите проверить отношения и ограничения в вашей базе данных. Также используйте профилировщик Sql Server, чтобы увидеть, что на самом деле отправляется в вашу БД, может быть полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...