Entity Framework - ObjectContext.DeleteObject (), когда связанные объекты теряют - PullRequest
0 голосов
/ 04 декабря 2010

У меня есть две сущности в отношениях много-к-одному. Виджет (1) <-> (*) Пользователи.

Если по какой-то странной причине был удален виджет в базе данных, где не может быть внешнего ключа или другого ссылочного ограничения, которое помешало бы существованию пользователей, если бы не было соответствующего виджета, я не могу использовать EF для ObjectContext.DeleteObject (). Сообщение

System.Data.UpdateException: Entities in '<Users>' participate in the '<UsersWidgets>' relationship. 0 related 'Widgets' were found. 1 'Widget' is expected.
   at System.Data.Mapping.Update.Internal.UpdateTranslator.RelationshipConstraintValidator.ValidateConstraints()

Есть ли рекомендуемый способ справиться с этим в коде?

Спасибо!

Ответы [ 2 ]

1 голос
/ 04 декабря 2010

Вам следует изменить свою модель данных объекта (EDM) , чтобы она соответствовала правилам, изложенным в схеме базы данных.

Если между нет никаких ограничений ссылочной целостностиПользовательские и виджеты таблиц в базе данных и столбец внешнего ключа в Пользовательские могут иметь значение nullable, тогда связь между соответствующими им объектами в EDM должна иметь кратность 0..1: * (ноль или один-ко-многим) .

В настоящее время, вероятно, установлено значение 1: * (один-ко-многим) , чтовызывая ошибку проверки, так как в соответствии с этим, Пользователь всегда должен иметь ровно один связанный Виджет .

Связанные ресурсы:

0 голосов
/ 04 декабря 2010

Это исключение обычно возникает, если у вас есть FK для пользователей на виджеты, который НЕ обнуляется в БД.Итак, первое, что вы должны проверить, если FK определен как обнуляемый для пользователей.Какую базу данных вы используете?Я знаю только о MSSQL Server 2008. Если это так, проверьте, какие свойства установлены для отношения в базе данных.Вы можете определить действие UPDATE и DELETE для отношения.Если вы не хотите, чтобы пользователь удалялся при удалении виджета, следует проверить, отключено ли каскадное удаление.Существует также возможность установить для виджета пользователя значение null.

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