Я создаю четырехслойное веб-приложение ASP.Net.
Слои:
- Уровень данных
- Слой сущности
- Бизнес-уровень
- UI Layer
Слой сущности имеет мои классы модели данных и построен из моей модели данных сущности (файл edmx) в слое данных с использованием шаблонов 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;
}
}
Ленивая загрузка отключена, так как я не хочу, чтобы мои запросы выполнялись на других уровнях этого приложения. Я получаю следующую ошибку при попытке доступа к информации на уровне пользовательского интерфейса:
Экземпляр ObjectContext был
распоряжаться и больше не может быть использован для
операции, требующие подключения.
Я уверен, что это потому, что мой DataModelContainer "dmc" был удален. Как я могу вернуть этот объект IEnumerable из моего уровня данных, чтобы он не полагался на ObjectContext, а исключительно на DataModel?
Есть ли способ ограничить отложенную загрузку только для слоя данных?