我要设计与.NET数据访问层,可能会使用一个以上的数据库管理系统(MySQL和SQL数据库)使用相同的关系设计。
基本上,它是简单的从一个数据库切换到另一个,所以我想请你给我推荐一些web站点或书籍,一直对您有用,与常见的设计模式或一般的信息来实现这种数据访问层。
谢谢。
我要设计与.NET数据访问层,可能会使用一个以上的数据库管理系统(MySQL和SQL数据库)使用相同的关系设计。
基本上,它是简单的从一个数据库切换到另一个,所以我想请你给我推荐一些web站点或书籍,一直对您有用,与常见的设计模式或一般的信息来实现这种数据访问层。
谢谢。
我由Martin Fowler推荐企业应用架构模式。
该模式的列表也是在他的网站
该DataMapper的模式也与此相关。
我喜欢使用基于接口的数据库访问。 对于Ado.net每个DB提供程序实现基本的接口,当你使用这些代码可能是这样的:
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代码。
在一般情况下,我第二约翰·诺兰的建议, 企业应用架构模式 。
更具体地讲,我总是建议你隐藏你的数据访问层的界面后面,使用依赖注入在运行时注入特定的数据访问组件到你的域逻辑。
您可以使用依赖注入容器或做手工 。
在技术方面,我建议微软的实体框架 ,因为您的数据访问需求似乎被限制在关系数据库。 实体框架是微软官方OR / M,它有许多不同的RDBMS,以及LINQ支持提供商。
这真的取决于你的层的大小和你的产品开发的类型。 如果它是相当不错的载然后ADO.NET可能会是理想的。 如果它是一个更大的DAL层和DBMS多靶点其绿地发展,最好使用ORM工具。 他们是快速,高效,成熟的产品,并能迅速启用retargetting到另一个数据库,只需改变一个参数。 写静态ADO,是传递到传统的东西。
有几个ORM工具,可以做的工作,所有的工作slightlty不同,而且取决于你的预算,你的团队的大小等,他们也可以通过在无需编写映射类像NHibernate的,或通过反射工作,即属性标记工作。
对于自由的,即开源的,如果你的清贫,NHibernate的是理想的。 我使用这个此刻,打造DAL层,对于大型进取精神产品。 其出色的,但需要一些时间来掌握。 与NHibernate定义映射类,在执行时为您生成的数据库模型。 它支持存储过程。 不足之处是,它正确地需要一些时间来学习,尤其是在映射复杂的数据。 其出色的。 它有一个庞大的样本和其他项目荡荡用它多数民众赞成捆绑。 退房Koders.com。
如果你有一定的预算,然后LLBLGEN是理想的。 它是强类型,并且还支持存储过程。
如果有一些数据模型已经上市,那么TierDeveloper是理想的。 它基本上是免费的,作品从你的数据库模型开发了一组类。 唯一不足的是MySQL的映射是第三方。 它是一种进取精神类产品已取得免费支持NCACHE,它的一种可能的方法。
如果你不顾一切地坚持使用MS,他们正朝着ORM移动,并有一个名为ADO.NET实体框架产品。 功能上它并不像上面定义的工具完成。 其背后的成熟大约3代。 它在VS 2008 SP1中提供。 MySQL的连接器将是一个成本。
此外,你可以使用LINQ。 它也将针对MySQL的,如果您还需要的连接器。
理想情况下,最好的办法是与ORM。 如果不能支持开源的,有预算,然后得到
希望帮助。
我发现ADO.NET是对这个非常有用的。 它拥有所有你需要创建一个数据访问层依赖于您使用的数据库的功能。
NHibernate的是专门用来处理这种情况的,如果你愿意去学习它