数据访问层(DAL)设计

时间:2009-03-04 21:47:32

标签: c# data-access-layer

我正在使用.Net企业库数据访问应用程序块进行数据访问层设计。

在我的分类DAL课程中,我的方法如下:

GetProductsInCategory(int CatId),GetAllProducts,GetCategories等

我的问题是:我在哪里放这行代码?

DatabaseFactory.CreateDatabase("MyDB");

我应该把它放在上面的每个方法中,还是我有一个基类,它会将Database对象返回给我的DAL类。

另外,我应该将这些DAL类方法保持为静态吗?

3 个答案:

答案 0 :(得分:3)

我更喜欢在示例数据库中返回公共对象(如连接)的基类。

以下是设计数据访问层的参考:.NET Application Architecture: the Data Access Layer

我使用Microsoft企业库数据访问应用程序块。它完成了这里提到的大部分事情。但是连接或事务之类的常见内容会转到我的基类。

alt text

  

DataServiceBase类提供   常见的数据访问功能   打开数据库连接,   管理交易,设置   存储过程参数,执行   命令等等。其他   单词,DataServiceBase类   包含通用数据库代码和   为您提供一套帮助   用于个人数据的方法   服务类。派生数据   服务类使用辅助方法   在DataServiceBase中具体   目的,比如执行特定的   命令或运行特定查询。

答案 1 :(得分:1)

感谢你的提示..我将拥有从基类DBManager派生的所有DAL类。这个类将有一个名为GetDatabase()的受保护方法,该方法将包含代码:return DatabaseFactory.CreateDatabase(“MyDB”);派生类中的方法看起来像:..

public DataSet GetProductsInCategory(int Category) 
{
Database db = base.GetDatabase(); 
DbCommand dbCommand = db.GetStoredProcComman("GetProductsByCategory"); 
db.AddInParameter(dbCommand, "CategoryID", DbType.Int32, Category); 
return db.ExecuteDataSet(dbCommand);
} 

这个DAL设计看起来不错吗?

答案 2 :(得分:0)

我建议使用SubSonic进行DAL和对象生成。它实现了Microsoft的Application Block,但为您提供了简单(强大)的查询功能,如;

SubSonic.Query qry = new SubSonic.Query(Usr.Schema);
qry.SetSelectList(Usr.Columns.UserPkid);
qry.QueryType = SubSonic.QueryType.Select;
qry.AddWhere(Usr.UsernameColumn.ColumnName, SubSonic.Comparison.Equals, Username);

using (IDataReader reader = qry.ExecuteReader())
{
    while (reader.Read())
    {
        Trace.WriteLine("Fetched User Pkid [" + reader[Usr.Columns.UserPkid].ToString() + "]");
    }
}

当然它实现了ActiveRecord模式,因此对象类具有.Delete(),. Add(),。Get()类型方法。