В Entity Framework 4 Можно ли выбрать загрузку некоторых запросов в POCO без использования прокси-классов? (С целью кэширования этого объекта для будущего использования только для чтения). Я использую шаблон «Репозиторий - Служба».
Под этим я подразумеваю:
var order = _orderService.GetById(1);
// after order is loaded then we can see in the debugger that:
// order.Customer is of type System.Data.Entity.DynamicProxy.Customer_17631AJG_etc
Я хочу, чтобы order.Customer
фактически использовал тип POCO MyApp.Models.Entities. Клиент
вместо прокси для этого типа.
РЕДАКТИРОВАТЬ: Основываясь на предложении Ладислава добавить метод "GetUnproxied" в Репозиторий, я внес следующее изменение:
// this is the current method that must return a DynamicProxy
public IQueryable<T> GetQuery()
{
return ObjectSet.AsQueryable();
}
// this is the new additional method that must return the plain POCO
public IQueryable<T> GetReadOnly()
{
ObjectContext.ContextOptions.ProxyCreationEnabled = false;
var readOnly = ObjectSet.AsQueryable();
ObjectContext.ContextOptions.ProxyCreationEnabled = true;
return readOnly;
}
Это правильно?
Мне это не кажется потокобезопасным. Оба метода используют один и тот же экземпляр ObjectContext, поэтому ProxyCreationEnabled == false
может произойти в одном потоке, а затем public IQueryable
будет вызван в другом thread - что внезапно означало бы, что метод прокси может вернуть объект без прокси.