2

是否有MS SQL 2008+ 相关联的 ORM,生成 .NET 代码,利用 MS SQL 特定功能?

我对 2 个功能特别感兴趣:

(1) 通过键获取一组记录,不会映射到“select in”查询。
- 这可以通过在 2005+ 中使用或在 2008+ 中OPENXML使用表值参数来实现

(2) 通过单个请求向数据库插入多个记录(这与 Bulk-Insert 相似,但不同)。例如:

Customer[] customers = CreateSomeCostomers();  
dataManager.Save(customers);

所以在客户端准备好SQL相关代码,然后全部发送到SQL服务器。

顺便说一句,存储过程是不可能的。

如果您 stackoverflowers 对我有任何建议,我会很高兴。

谢谢!

更新:

我正在寻找一个完整的解决方案,而不是我可以根据自己的需要定制的可扩展框架/产品。所以自定义NHibernate/linq2sql/etc。通过编写我自己的代码实现不适合我的需要。


关于接受的答案的几句话。

似乎目前所有的 ORM 框架都试图涵盖多个数据库/技术。所以我想没有现成的解决方案可以满足我的需求,至少没有开箱即用的解决方案。

我了解指向 Fluent NHibrenate 的 @Ryk 认为这种解决方案确实存在,这是配置问题。我查看了 NHibernate 和 Fluent NHibernate 的源代码,但没有发现任何支持我正在寻找的功能的东西。OPENXML例如,我sp_xml_preparedocument在两个源代码中都找不到关键字。所以也许我错过了一些东西,但我不这么认为。由于赏金是有时间限制的,我无法对 FN 或 NH 进行更深入的调查。我仍然认为那里不支持这些功能。

因此,根据我的最佳理解,公认的答案是,没有这样的事情。声称最通用的答案是@Cade Roux 的答案。

我感谢大家的参与。干杯!

4

5 回答 5

1

抱歉不行。微软决定使用 Entity Framework 走多平台路线。尽管如果他们围绕 SQL Server 构建一些东西并将其他数据库留给各自的数据库供应商或第三方 OR 映射器,那就太好了。

于 2011-02-11T07:26:56.363 回答
0

是的,我相信Fluent NHibernate会做你想做的事。需要一点设置,不是太难,但一旦它开始工作,它就是一种享受。

在性能方面,它非常好,但如果你打算用它做一个每分钟数千次的事务系统,我可能会采用旧的存储过程方式进行调整。

基本思想是创建实体类和映射器类,将数据库对象映射到 c# 对象。从那里您只需填充对象或对象列表,然后执行 Object.Update() 或 Object.Delete() 或 Object.Get() 等。已经内置,您不必去连接它。如果需要,您可以随时覆盖它。它非常灵活。

于 2011-02-17T10:31:14.450 回答
0

除了编写自己的数据访问层之外,Nhibernate 是您唯一的选择,您可以轻松地扩展 Nhibernate 以使用新的|自定义|特定的 SQL 语法。

于 2011-02-17T15:27:51.143 回答
0

如果您想使用 SQL Server 功能,那么黑盒 ORM 将无法满足此要求。

如果您想充分利用您选择的数据库(任何数据库),您将更加紧密地耦合,因此您最好使用代码生成(生成存储过程和)映射层而不是 drop - 在 ORM 中。

于 2011-02-14T16:55:12.717 回答
0

我意识到这个答案来得有点晚(尽管可能对其他人有所帮助)。由于此处给出的原因以及在此过程中获得适当的数据库源代码管理,我们有自己的映射器,它可作为开源项目使用:bsn ModuleStore

这个工具集并没有像 nHibernate 或实体框架这样的 ORM 那样一路走来,它确实需要更多的编码。但是,对于所有数据访问,它都遵循使用 SP 的“古老”方法(请不要争论 - 动态和静态 DB 代码各有利弊)。结果是查询必须在 SQL 中手动编码,让您完全控制在 DB 服务器上执行的代码。

至于一些好处,您可以获得实体的完整双向映射(是的,使用 TVP,使用高效的自定义数据读取器“流式传输”实体,而不是像大多数使用 TVP 的示例那样构建内存中的 DataTable)。它还支持返回多个结果集的 SP,最后但并非最不重要的是,它为数据库模块化、版本控制(在源代码级别与 SCM 正确集成)和完整性检查(比较数据库中存在的对象)提供了完全集成和相当可扩展的支持针对源文件)。

于 2012-05-16T13:43:39.093 回答