我需要设计一个在.NET上工作的数据访问层,可能会使用多个数据库管理系统(如Mysql和Sql Server),但这些数据库将拥有相同的关系设计。
基本上,设计需要简单易用地可以从一个数据库切换到另一个,我希望你能推荐一些对你有用过的网站或书籍,其中包含常用的设计模式或一般信息以实现这种类型的数据访问层。
谢谢。
我需要设计一个在.NET上工作的数据访问层,可能会使用多个数据库管理系统(如Mysql和Sql Server),但这些数据库将拥有相同的关系设计。
基本上,设计需要简单易用地可以从一个数据库切换到另一个,我希望你能推荐一些对你有用过的网站或书籍,其中包含常用的设计模式或一般信息以实现这种类型的数据访问层。
谢谢。
我喜欢使用基于接口的数据库访问。Ado.net的每个数据库提供程序都实现了基本接口,当您使用它们时,您的代码可能如下所示:
public static IDbConnection GetConnection(string connectionName)
{
ConnectionStringSettings ConnectString = ConfigurationManager.ConnectionStrings[connectionName];
DbProviderFactory Factory = DbProviderFactories.GetFactory(ConnectString.ProviderName);
IDbConnection Connection = Factory.CreateConnection();
Connection.ConnectionString = ConnectString.ConnectionString;
return Connection;
}
接下来,当您需要与数据库进行通信时:
public static DataTable Dummy()
{
using (IDbConnection Connection = GetConnection("SiteSqlServer"))
{
IDbCommand Command = Connection.CreateCommand();
Command.CommandText = "DummyCommand";
Command.CommandType = CommandType.StoredProcedure;
Connection.Open();
using (IDataReader reader = Command.ExecuteReader())
{
DataTable Result = new DataTable();
Result.Load(reader);
return Result;
}
}
}
使用这种技术,您可以创建完全独立于数据库的DAL。当然,在某些复杂情况下这是不够的。但大多数情况下这就足够了,您不需要各种外部库。
最简单的解决方案是使用ORM。看看LLBLGen。使用适配器模式,您可以在使用相同的业务对象的同时切换数据提供程序。它可以为MySql和Sql Server生成代码。
这真的取决于您的层大小和正在开发的产品类型。如果它相当完整,那么ADO.NET可能是理想的选择。如果它是一个更大的DAL层,并且它是多目标dbms的绿地开发,最好使用ORM工具。它们是快速、高效和成熟的产品,可以通过更改单个参数快速启用重新定位到另一个数据库。编写静态ADO已经成为过时的技术。
有几个ORM工具可以完成这项工作,它们都略有不同,取决于您的预算、团队规模等因素。它们可以通过编写像NHibernate这样的映射类来工作,也可以通过反射来工作,即属性标记。
如果您的预算有限,即开源免费,那么NHibernate是理想的选择。我目前正在使用它来构建大型企业产品的DAL层。它非常出色,但需要一些时间来掌握。使用NHibernate,您定义映射类,当执行时会为您生成数据库模型。它支持存储过程。缺点是需要花费一些时间来正确地映射复杂数据,特别是在学习方面。它有大量的示例和其他项目可供使用。请查看Koders.com。
如果您有一些预算,那么LLBLGen是理想的选择。它是强类型的,还支持存储过程。如果你愿意学习,NHibernate旨在处理这种情况。