Я использую распределенное веб-приложение с сервером базы данных, содержащим базу данных SQL Server 2005, сервер приложений, на котором мы установили трехуровневое приложение-службу Microsoft, и веб-сервер, на котором я использую MVP с контролирующим контроллером.
Мой уровень обслуживания на сервере приложений возвращает IEnumerable<Country>
, когда я запрашиваю список, скажем, стран. Сервисный уровень вызывает компонент доступа к данным, который выдает сущности, подобные этой:
public virtual IEnumerable<T> FillList(DbCommand command, DataContext context)
{
using (IDataReader dataReader = this.ExecuteReader(command, context))
{
while (dataReader.Read())
{
T entity = this.Fill(dataReader, context);
yield return entity;
}
}
}
Теперь я немного обеспокоен подключением к моей базе данных, так как оно останется открытым, когда я сериализую сущности через WCF для моего контроллера. Мой первый вопрос: действительно ли важно оставить открытым соединение с моей базой данных при сериализации сущности на сущность моему контроллеру? Преимущество этого решения в том, что я могу использовать LINQ даже над большими коллекциями (не LINQ to SQL).
Я придумал это решение: на уровне сервиса я всегда возвращаю список, например:
public virtual List<T> GetList()
{
List<T> list = new List<T>();
list.AddRange(this.dataAccess.GetList()));
return list;
}
Но здесь я возвращаю полный список контроллеру, и, возможно, мне нужны только некоторые элементы из списка. Мой второй вопрос, если это хороший дизайн?
Ждем ваших предложений!