2009-10-11 64 views
1

我想启动一个大量使用数据库的应用程序,并且应该在.NET下的Windows以及Mono下的Mac/Linux上运行。如何以便携方式与数据库交谈?

做了一些研究后,我意识到LINQ-to-SQL和LINQ-to-Entities目前都不能在Mono中生产(herehere)。根据前一个链接,LINQ-to-SQL可能至少会在2009年11月到期,因此可能会变成Mono 2.6。

Mono还实现了ADO.NET 2.0,据我所知,尽管test results看起来不太好(假设页面是最新的)。此外,与LINQ相比,使用原始ADO.NET将会非常痛苦。

在这种情况下你会推荐哪种数据库访问API?

+1

使用NHibernate。 – 2009-10-11 21:16:04

+0

如果你正在考虑SubSonic,这个问题(即使有偏见:D)可能会影响你SubSonic - http://stackoverflow.com/questions/1384/subsonic-vs-nhibernate – 2009-10-14 11:43:04

回答

0

为了记录,我们将IQToolkit与自定义工具结合在一起,从数据库中生成类。结果比ActiveRecord风格的方法更低级;基本上只不过是在SQL之上添加强大的打字和LINQ支持。

1

我推荐在这里通过接口编码。关于.NET的一个优点是它大量使用接口,所以你可以使用IDbConnection,IDbCommand等进行编码。这意味着您可以在ADO.NET中编写您的应用程序,使其成为虚拟数据库/提供程序不可知论者。

+0

所以你建议ADO.NET然后? – 2009-10-11 21:21:07

+1

我是 - 你可以使用像NHibernate(或Castle ActiveRecord)这样的东西为你照顾这件事。 – 2009-10-11 21:28:13

+0

因此,Mono和.NetFX的不同实现? – 2009-10-12 14:48:55

1

这里是与单声道支持ADO.Net数据提供商的链接:

http://www.mono-project.com/Database_Access

在Mono运行时,你不说你将使用哪个数据库。 Linq to SQL仅支持MS SQL Server。

正如其他人所说,它看起来像nHibernate是要走的路。

+0

那么...有http://code2code.net/DB_Linq/,但它看起来不完全是生产就绪。我对数据库不可知的方法感到非常满意。 – 2009-10-11 22:12:02

3

如果你想要一个ORM,使用NHibernate。如果您不需要ORM,请使用ADO.NET。

+0

很好的答案。我想要LINQ to SQL :)不是真正的ORM,但不像ADO.NET那么努力。耻辱我不能那样。那么NHibernate就是这样。 – 2009-10-12 09:02:27

+0

NHibernate在几乎所有方面都比LinqToSql好,所以它不是真正的牺牲品。 LinqToSql可能看起来很“容易”,但事实并非如此。 – 2009-10-12 09:43:46

1

经过大量研究,我发现了SubSonic,它比nHibernate更接近LINQ-to-SQL模型。只是提到它,因为没有其他人。还不确定,如果这将是最后的选择。

+0

尽管我没有在这个.net/mono中找到我的最终解决方案,但我从我的阅读中偏向于SubSonic。 – kenny 2009-10-12 14:37:40

+0

SubSonic与NHibernate有很多不同的特性,这对你来说可能很好。如果你不认为NHibernate看起来像LinqToSql,也许你还没有穿过Castle ActiveRecord呢?另外,NHibernate支持Linq。我不清楚对LinqToSql有什么吸引力? – 2009-10-12 15:39:12

+0

这很简单 - 我不想要ORM。我只想以一种比原始SQL更容易的方式访问数据库 - 主要是让我能够很好地读取结果。 – 2009-10-13 12:09:17