【发布时间】:2010-11-18 14:35:33
【问题描述】:
我正在使用一个分布式 Web 应用程序,其中一个数据库服务器包含 SQL Server 2005 数据库,一个我们安装了 Microsoft 三层服务应用程序的应用程序服务器,以及一个我使用 MVP 和监督控制器的 Web 服务器。
当我请求假设国家/地区的列表时,我的服务层在应用程序服务器上返回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)。
我想出了这个解决方案:在服务层,我总是返回一个List,像这样:
public virtual List<T> GetList()
{
List<T> list = new List<T>();
list.AddRange(this.dataAccess.GetList()));
return list;
}
但是在这里我将一个完整的列表返回给控制器,也许我只需要列表中的一些项目。我的第二个问题是这是否是一个好的设计?
期待您的建议!
【问题讨论】:
-
什么是“Microsoft 三层服务应用程序”?谷歌对这个词的唯一打击是this question!
标签: wcf serialization ienumerable