Entity Framework - обратная проверка внешнего ключа - PullRequest
1 голос
/ 12 мая 2011

У нас есть система, которая позволяет администраторам создавать новые типы контента в системе, в том числе ссылки на внешние ключи для других таблиц.Затем администратор может перестроить базу данных, после чего он создает таблицы и все необходимые связи, затем перестраивает EDMX и перекомпилирует все.Работает как чемпион (я не написал это, или я мог бы знать ответ на этот вопрос).

У нас есть один недостаток, когда пользователь собирается удалить запись, с которой может быть связан элемент вдругой стол.Это выдает ошибку из-за ссылочной целостности.Я, конечно, поймаю это в ловушку, но все, что я могу предоставить прямо сейчас, это общий тип ошибки «Вы не можете удалить этот элемент, потому что он связан с чем-то».Я бы предпочел проверить, можно ли удалить элемент, и отключить кнопку, если нет.

Есть ли способ определить, с какой таблицей / строкой связан элемент, подлежащий удалению, во время выполнения?Обычно я просто запрашиваю связанные таблицы, но из-за характера этого приложения я не знаю, какими будут другие таблицы во время разработки.

Короче говоря, если у меня есть:

Foo: FooID, FooName Bar: BarID, FooID, BarName Pow: PowID, FooID, PowName

Можно ли сказать во время выполнения, что строка в Foo не может быть удалена из-за связи FKиз бара или Пау, и если да, то могу ли я сказать, какая таблица вызывает ошибку?

Заранее спасибо;первая публикация здесь, так что прошу прощения за любые этикет этикеты :)).

1 Ответ

2 голосов
/ 12 мая 2011

Вы должны запросить метаданные и получить список всех навигационных свойств

ObjectSet = context.CreateObjectSet<YourEntityType>();

// Get entity set for current entity type
var entitySet = ObjectSet.EntitySet;
// Get name of the entity's navigation properties
_propertyNames = ((EntityType)entitySet.ElementType).NavigationProperties.Select(p => p.Name).ToArray();

Теперь у вас есть свойства, которые необходимо проверить перед удалением.Чтобы проверить свойства, вы должны загрузить эти элементы и проверить, существует ли связанная сущность.Оба, вероятно, потребуют много размышлений, которые повлияют на производительность вашего приложения.

Я должен сказать, что архитектура вашего приложения ужасна.Это как пример: где не следует использовать EF или как не следует использовать EF.

...