我必须设计一个带有.NET的数据访问层,它可能会使用多个具有相同关系设计的数据库管理系统(Mysql和Sql Server)。
基本上,从一个数据库切换到另一个数据库必须简单,所以我希望你向我推荐一些对你有用的网站或书籍,通常的设计模式或信息来实现这种数据访问层。
谢谢。
答案 0 :(得分:12)
答案 1 :(得分:8)
我喜欢使用基于界面的Db访问。 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;
}
然后,当您需要与db:
进行通信时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。当然,对于一些复杂的情况,这还不够。但大多数情况下这将完成工作,并且您不需要各种外部库。
答案 2 :(得分:2)
最简单的解决方案是使用ORM。查看LLBLGen.使用适配器模型,您可以在使用相同的业务对象时在数据提供程序之间切换。它可以为MySql和Sql Server生成代码。
答案 3 :(得分:2)
一般来说,我是John Nolan对Patterns of Enterprise Application Architecture的推荐。
更具体地说,我总是建议您在接口后隐藏数据访问层,并使用依赖注入在运行时将特定的数据访问组件注入域逻辑。
您可以使用依赖注入容器或do it manually。
在技术方面,我建议使用Microsoft的Entity Framework,因为您的数据访问需求似乎受限于关系数据库。实体框架是微软官方的OR / M,它提供了许多不同的RDBMS以及LINQ支持。
答案 4 :(得分:1)
这实际上取决于图层的大小和您开发的产品类型。如果它包含得相当好,那么ADO.NET可能是理想的。如果它是一个更大的DAL层,并且它的多区域dbms的绿地开发,最好使用ORM工具。它们是快速,高效和成熟的产品,只需更改单个参数即可快速启用到另一个数据库的重新定位。编写静态ADO是传递给遗留的东西。
有几种ORM工具可以完成这项工作,所有工作都略有不同,并且依赖 你的预算,团队规模等等。他们可以通过编写像NHibernate这样的映射类来工作,也可以通过反射来工作,即属性标记。
对于免费,即开源,如果你的肤色,NHibernate是理想的。我现在正在使用它,为大型企业产品构建DAL层。它的优秀,但需要一些时间来掌握。使用NHibernate,您可以定义映射类,在执行时为您生成db模型。它支持存储过程。缺点是需要一些时间来学习,特别是在正确映射复杂数据方面。它的优秀。它有一大堆样本和其他项目浮动使用它。看看Koders.com。
如果你有一些预算,那么LLBLGen是理想的选择。它是强类型的,也支持存储过程。
如果某些数据模型已经可用,那么TierDeveloper是理想的选择。它基本上是免费的,并且通过从数据库模型开发一组类来工作。唯一的缺点是mysql的mapper是第三方。它是一个企业级产品,可以自由支持ncache,它是一种可能的方法。
如果您迫切希望坚持使用MS,他们正朝着ORM迈进,并拥有一款名为ADO.NET Entity Framework的产品。从功能上讲,它不如上面定义的工具那么完整。它在成熟时落后约3代。它在vs sp1中可用。 mysql的连接器是一个成本。
此外,您可以使用LINQ。如果你还需要连接器,它也将以mysql为目标。
理想情况下,最好的选择是使用ORM。如果你不能支持开源,并有预算, 然后得到
希望有所帮助。
答案 5 :(得分:0)
我发现ADO.NET对此非常有用。它具有创建独立于您使用的数据库的数据访问层所需的所有功能。
答案 6 :(得分:0)
NHibernate旨在处理这种情况,如果您愿意学习它