Я создаю 4-слойное веб-приложение ASP.Net. Слои:
- Уровень данных
- Уровень сущности
- Бизнес-уровень
- Уровень пользовательского интерфейса
Уровень сущности имеет мои классы моделей данных и построен из моей модели данных сущности (файл edmx) в datalayer с использованием шаблонов T4 (POCO). Уровень сущности ссылается во всех остальных слоях.
В моем слое данных есть класс, называемый SourceKeyRepository, который имеет такую функцию:
public IEnumerable<SourceKey> Get(SourceKey sk)
{
using (dmc = new DataModelContainer())
{
var query = from SourceKey in dmc.SourceKeys
select SourceKey;
if (sk.sourceKey1 != null)
{
query = from SourceKey in query
where SourceKey.sourceKey1 == sk.sourceKey1
select SourceKey;
}
return query;
}
}
Lazy loading отключен, так как я не хочу, чтобы мои запросы выполнялись в других слоях этого приложения. При попытке получить доступ к информации в слое пользовательского интерфейса я получаю следующую ошибку:
Экземпляр ObjectContext был и больше не могут использоваться для операции, требующие подключения.
Я уверен, что это связано с тем, что мой DataModelContainer "dmc" был удален. Как я могу вернуть этот объект IEnumerable из моего слоя данных, чтобы он не полагался на ObjectContext, но только на DataModel?
Есть ли способ ограничить ленивую загрузку только в слое данных?