C# 如何使用Microsoft技术开发独立于dbms的应用程序?
我需要以这样一种方式编写应用程序,它不应该担心传入的DBMS。可以是Oracle、PostgreSQL、MySql等 本地dbms将使用SQL Server 2008,我将在其中加载数据 需要/计划做什么C# 如何使用Microsoft技术开发独立于dbms的应用程序?,c#,.net,silverlight,database,C#,.net,Silverlight,Database,我需要以这样一种方式编写应用程序,它不应该担心传入的DBMS。可以是Oracle、PostgreSQL、MySql等 本地dbms将使用SQL Server 2008,我将在其中加载数据 需要/计划做什么 用户有文本框,可以在其中为每个可能的dbms在本地数据库/配置文件中创建/保存连接字符串值 然后,应用程序应该使用它来形成连接字符串,并连接到传入的数据库,如果可能的话,可以一次连接一个数据库,也可以同时连接一个数据库 检索值并将其放入本地数据库中 无需将数据写入传入数据库。仅单向 简而言之,
应用程序基于Silverlight+ASP.NET技术。这是一个非常基本的要求,您应该能够使用一个对象关系映射框架轻松地实现它 如果我推荐一种,请使用NHibernate
Silverlight+ASP.NET与数据的持久化方式无关,只要在服务器端持久化数据即可。对于Silverlight应用程序,您还需要一些WCF web服务来在客户端和服务器之间进行通信。您应该搜索和研究设计模式。看看这个。也请查看
如果你想选择自己的解决方案,那么你必须分层工作。定义松散耦合的数据访问层(DAL)。一种方法是使用接口。为数据库连接定义一个接口,然后让DBMS的每个类来实现它。然后,您可以在以下几行中获取数据库连接字符串。
然后你可以像这样使用它:
public static DataTable GetData()
{
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;
}
}
}
与其他答案一样,我强烈建议您看看下面的问题,它应该能很好地分解ORM。以其他答案所说的为基础。用这种方式思考你的问题 您有“前端(asp.net/silver light)”“数据存储” 你想要的是中间的一步 前端“数据库层”数据存储
这个中间层可能是一个ORM,但ORM真正的意义(除了上百行代码和多年的精炼经验)是一个存储库和工作单元模式的实现。+1:如果你不想有ORM的开销,你宁愿自己编写,那么这将是一个开始的好地方。谢谢大家。我现在正在看这本书,也谢谢你提供的样品。看起来不错。。繁忙的日程安排和作业:D…迟到reply@dwerner如果您现在仍在编写自己的orm/数据访问代码,您就不是很聪明:您将浪费大量时间,遇到其他人已经解决的相同错误,并且您必须通过更新来支持自己的代码。@Frans Bourna-我同意这种情况,因为为什么要重新发明轮子,对吗?在.NET这样的平台上,NHibernate做得很好。在其他一些较新的平台上,比如Node.js,它的解决方案并没有让我满意,所以我在那里启动了一个项目。最后,是的,我同意你不应该重新发明轮子,除非所有其他轮子都不能让你满意。+1:ORM在很多情况下都是你自己想要实现的,所以这可能是一个巨大的胜利和时间节约。另一方面,对于初学者来说,ORM可能很复杂。我也可以自己推荐NHibernate。
public static DataTable GetData()
{
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;
}
}
}