Шаблоны Entity Framework v4 POCO: репозиторий возвращает объект неправильного типа - PullRequest
2 голосов
/ 23 января 2011

Я только что реализовал хранилище на основе шаблонов сущностей POCO EFv4.

Когда я делаю это

public Client Load(Guid firmId,
                   int prettyId)
{
    var client = (from c in _ctx.Clients where c.firm_id == firmId && c.PrettyId == prettyId select c).FirstOrDefault();
    return client;
}

клиент вернулся типа

{System.Data.Entity.DynamicProxies.Client_8E92CA62619EB03F03DF1A1FC60C5B21F87ECC5D85B65759DB3A3949B8A606D3}

Что здесь происходит? Я думал, что избавлюсь от любых ссылок на типы из пространства имен System.Data.Entity. Возвращаемый экземпляр должен иметь тип Client, который является простым классом POCO.

Ответы [ 3 ]

2 голосов
/ 24 января 2011

Я могу подтвердить, что решение состоит в том, чтобы установить

context.ProxyCreationEnabled = false;

, который отключает создание объектов с динамическим прокси-типом и оставляет нас с простыми POCO, что было в первую очередь после шаблонов EF POCO.

Но вы теряете ленивую загрузку свойств навигации и отслеживание изменений на объектах.Во-первых, вы должны использовать context.LoadProperty() или Include() метод для вашего объекта ObjectQuery.Во-вторых, я пока не знаю решения (на самом деле не имеет смысла отслеживать изменения в POCO).

Также вот аналогичный вопрос, на который я хотел бы обратить внимание ЧтоНедостатки отключения ProxyCreationEnabled для CTP5 кода EF сначала

0 голосов
/ 21 апреля 2016

Это можно настроить глобально для контекста EF в файле * Model.Context.tt в * Model.edmx в

if (!loader.IsLazyLoadingEnabled(container))

...

    this.Configuration.LazyLoadingEnabled = false;
    this.Configuration.ProxyCreationEnabled = false;

Это будетбудет добавлен в сгенерированный файл * Model.context.cs и будет сохраняться между обновлениями из базы данных.

Я предпочитаю этот параметр, так как не хочу, чтобы дочерний объект, соответствующий родительскому объекту, был загружен из базы данных.

ALT: его можно настроить для сериализации Json: Ошибка JSON.NET Обнаружена самосвязанная петля для типа

0 голосов
/ 02 декабря 2011

Я согласен, что ответ Маре правильный.Тем не менее, я хотел бы добавить предостережение.Если вы запустите запрос, для которого для параметра ProxyCreationEnabled не задано значение true, EF вернет DynamicProxies.Если впоследствии вы выполните запрос с параметром false, то EF вернет кэшированные объекты DynamicProxies независимо от значения параметра ProxyCreationEnabled.

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