Проверка EF4, является ли коллекция или связанный объект прокси для объектов самоконтроля - PullRequest
0 голосов
/ 11 марта 2011

All

Я начинаю с Entity Framework 4 (пока не CTP5) и изучаю сложности миграции NHibernate на EF.

Некоторый код, который у нас есть, проверяет, является ли коллекция или связанная сущность прокси-сервером и, если это так, выполняет некоторый код, отличный от нормального. Если коллекция является , а не прокси-сервером (то есть она уже загружена в контекст), тогда мы делаем что-то другое непосредственно для коллекции.

Я перенес этот код для использования интерфейса IRelatedEnd для коллекций, но в результате приведения моей ICollection к IRelatedEnd EF загружает коллекцию ... в результате коллекция никогда не является прокси, когда я проверяю IsLoaded == true в следующей строке.

Нужно ли делать что-то дополнительное, учитывая, что это пользовательское POCO или это ожидаемое поведение?

Аналогично, есть ли способ проверить, является ли связанный объект прокси-сервером или нет?

Большое спасибо

1 Ответ

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

Для проверки прокси в MSDN , предложенном для проверки на прокси-сервер, рекомендуется использовать что-то вроде этого:

public static bool IsProxy(object type)
{
    return type != null && ObjectContext.GetObjectType(type.GetType()) != type.GetType();
}

Этот метод работает как в EF 4, так и в EF 4.1 Codefirst.

Что касается отложенной загрузки, я никогда не использовал IRelatedEnd - просто оставил свойства навигации в POCO как ICollection и убедитесь, что отложенная загрузка включена. Кроме того, это просто работает.

context.ContextOptions.LazyLoadingEnabled = true;

В edmx также есть опция для отложенной загрузки.

...