Entity Framework удалить объект - ошибка параллелизма (как отключить параллелизм)? - PullRequest
0 голосов
/ 15 апреля 2011

Есть ли способ отключить ошибку параллелизма, генерируемую в EntityFramework?

Например:

using (xEntities5 entities = new xEntities5())
            {
                entities.Domains.MergeOption = System.Data.Objects.MergeOption.NoTracking;
                Domain domain = new Domain() { DomainId = id };
                EntityKey key = entities.CreateEntityKey(entities.CreateObjectSet<Domain>().EntitySet.Name, domain);
                domain.EntityKey = key;
                entities.Attach(domain);
                //entities.AttachTo(entities.CreateObjectSet<Domain>().EntitySet.Name, domain);
                entities.DeleteObject(domain);
                return entities.SaveChanges(); // returns affected rows... must catch error?
            }

Есть ли способ не выполнять попытку / перехват вокруг SaveChanges, чтобы определить, не было ли ничего удалено?

Ответы [ 2 ]

2 голосов
/ 15 апреля 2011

Как я знаю, вы не можете отключить ошибку параллелизма.Ошибка параллелизма основана на количестве затронутых строк, поэтому, если вы хотите удалить строку, и она не удаляется (например, потому что она больше не существует), возникает исключение параллелизма.Более того, SaveChanges работает в транзакции, поэтому, если вы хотите удалить 5 строк и удалить только 4 строки, исключение запускается, и все удаления откатываются.

Проверка параллелизма может быть еще более строгой, если вы используете столбцы, помеченныекак ConcurrencyMode.Fixed.Эти столбцы используются в тех случаях, когда выполняется условие операторов SQL, поэтому могут обрабатываться только неизмененные записи базы данных.

Как только вы получите исключение параллелизма, вы должны его решить.

1 голос
/ 15 апреля 2011

SaveChanges () генерирует исключения и не перехватывает их внутри, поэтому, если вы хотите продолжить выполнение, вы должны использовать try / catch. SaveChanges () также возвращает метод с числом объектов, зафиксированных в базе данных, то есть, если не произошло ошибок: -)

НТН.

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