我正在使用.Net企业库数据访问应用程序块进行数据访问层设计。
在我的分类DAL课程中,我的方法如下:
GetProductsInCategory(int CatId),GetAllProducts,GetCategories等
我的问题是:我在哪里放这行代码?
DatabaseFactory.CreateDatabase("MyDB");
我应该把它放在上面的每个方法中,还是我有一个基类,它会将Database对象返回给我的DAL类。
另外,我应该将这些DAL类方法保持为静态吗?
答案 0 :(得分:3)
我更喜欢在示例数据库中返回公共对象(如连接)的基类。
以下是设计数据访问层的参考:.NET Application Architecture: the Data Access Layer
我使用Microsoft企业库数据访问应用程序块。它完成了这里提到的大部分事情。但是连接或事务之类的常见内容会转到我的基类。
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()类型方法。