.net 是否有任何或映射程序提供异步方法?

.net 是否有任何或映射程序提供异步方法?,.net,asynchronous,data-access-layer,or-mapper,.net,Asynchronous,Data Access Layer,Or Mapper,是否有任何.NETO/R(对象/关系)映射器提供现成的异步方法 如果可能的话,我不想为异步方法编写锅炉板 我使用CCR框架使用异步方法推出了自己的DAL。 CCR基本上要求我不阻塞任何等待IO响应的线程 到目前为止,我的解决方案的优点在于它降到了最低限度。但随着这个项目在规模和功能方面的发展,我面临着维护原始SQL查询和锅炉板代码的艰巨任务 但另一方面,如果O/R映射器异步方法真的只是一个杂乱无章的黑客,增加了奇怪的复杂性,那么我并不是更好的选择 请不要关注异步编程的替代方案。似乎比LinqTo

是否有任何.NETO/R(对象/关系)映射器提供现成的异步方法

如果可能的话,我不想为异步方法编写锅炉板

我使用CCR框架使用异步方法推出了自己的DAL。 CCR基本上要求我不阻塞任何等待IO响应的线程

到目前为止,我的解决方案的优点在于它降到了最低限度。但随着这个项目在规模和功能方面的发展,我面临着维护原始SQL查询和锅炉板代码的艰巨任务

但另一方面,如果O/R映射器异步方法真的只是一个杂乱无章的黑客,增加了奇怪的复杂性,那么我并不是更好的选择

请不要关注异步编程的替代方案。

似乎比LinqToSQL更容易实现异步。看

就我个人而言,我会做的是使用我喜欢的(因为我没有使用NHibernate,我会担心学习曲线和潜在问题,所以我宁愿使用LINQtoSQL或定制数据访问层)并将其封装在自己的web服务中

如果您真的不想自己编写代码,您可以使用实体框架基本上就是这样做的。

是的,对于SQLAlchemy(最好的ORM之一),有sAsync:

和纳巴比:


以异步方式获取数据可以通过多种方式完成。将其外包给o/r映射器会带来一些您可能不想处理的挑战,因为这并不会真正降低代码的复杂性。主要问题是,您必须有一种机制,当o/r映射器完成提取时,该机制会通知调用方数据已就绪

这并不比自己创建一个线程并从该线程调用o/r映射器的获取逻辑复杂

当您声明要创建一个响应的Web服务时,您必须意识到调用方在Web服务之外,正在等待数据。I.o.w.:如果调用方使用webservice获取数据,那么它已经是异步的,因为其他客户端仍然可以调用webservice:原始调用方的请求在不同的线程上处理,获取数据的逻辑在该线程内运行,然后将数据返回给调用方

在这里,使用异步方法是没有用的,因为如果没有异步方法,则必须在数据准备就绪时通知调用方,这需要从Web服务推送到客户端,这需要客户端保持与Web服务的连接,只要抓取仍在进行


异步数据库交互并不是一种神奇的东西,你可以通过它来提高响应速度。异步数据库交互可以让调用方同时做其他事情。然而,如果这已经不是必需的,您就不需要开始异步db交互,这将使您的代码不那么复杂

我想你弄错了。我的理解是,您案例中的异步执行应该在体系结构级别而不是ORM级别处理,即消息队列驱动的体系结构。我看到的是,您的webserive只会在队列中放置一条消息,并且有某种后台代理在队列外执行异步处理

由于我没有足够的声誉发表评论,Stackoverflow提醒我插入另一个“答案”,我将在这里留下我的评论


李B:炼金术?如何将其与.NET结合使用?

听起来您缺少了一些索引

或者,您需要将数据库设计转换为OLAP模型

如果不是这样的话

  • 获取更多内存
  • 获得更多的CPU
  • 对表进行分区
  • 在数据库前面构建一个可以处理异步请求的包装器。它看起来像一个队列

  • 虽然我不确定他们中是否有人是开箱即用的,但您可以使用,这是基于模板的。您可以将异步部分添加到模板中。这至少可以让您不必维护样板代码和简单的SQL查询。这显示了如何将异步调用添加到MS Enterprise库(如果您选择,可以使用.NetTiers)

    截至2008年12月中旬,LLBLGen Pro本机不支持异步调用。目前也没有。看起来也不是这样。几乎只是搜索他们的文档,寻找异步或以begin开头的方法,因为这就是模式


    我让其他答案来说明这是否是一个好主意……

    这听起来像是一个过早优化的好例子。。。在我所见过的所有“高可伸缩性”的东西中,有两件事情似乎是关键的——去规范化您的数据库,并缓存。。。关于异步IOT什么都没有这是一个简单的问题,有没有提供异步方法的或映射程序?是还是不是?我认为,公平地说,在我的特定项目中,我能够更好地确定这是否是过度杀戮。在为@Orion Edwards辩护时,你说了“所有I/O请求”,这看起来确实是过度杀戮。如果有人打电话给你的服务,而你的回复正常,然后系统崩溃,您将丢失排队的I/O。这对您的解决方案合适吗?在游戏的这个阶段,我已经通过SqlCommand方法异步编写了后端DAL。总之,您的Web服务中不需要异步方法,因为它已经在使用一个系统,其中一个请求没有阻止其他请求。被阻止的线程比被阻止的线程少一个线程可用于其他请求。如果有足够多的线程被阻塞,等待IO和请求队列,队列将被填满,现在返回的“Service Unavailable”(服务不可用)消息将导致请求并行发生。但它们共享相同的系统资源。因此,我使用线程池的效率越高,系统可以处理的请求就越多。Harry,你不明白我关于异步方法的观点