任何.Net O / R(对象/关系)Mappers都提供开箱即用的异步方法吗?
如果可能的话,我不想为异步方法编写锅炉板
我使用CCR框架使用异步方法滚动了自己的DAL。 CCR基本上要求我不阻止任何等待IO响应的线程。
到目前为止,关于我的解决方案的好处在于它是最低限度的。但随着这个项目在规模和功能方面的增长,我面临着维护原始SQL查询和样板代码的轻微艰巨任务。
但另一方面,如果O / R映射器异步方法真的只是一个混乱的黑客,增加了复杂性,我不会更好。
请不要专注于异步编程的替代方案。
答案 0 :(得分:2)
答案 1 :(得分:2)
我认为你弄错了。我的理解是,你的情况下的异步执行应该在架构级而不是ORM级处理,即消息队列驱动的架构。我看到的是你的webserive只会在队列中放置一条消息,并且有某种后台代理会从队列中异步处理。
由于我没有足够的声誉来评论,而且Stackoverflow警告我插入另一个“答案”,我将在这里发表评论。
Lee B:SQLAlchemy?你如何使用.NET ???
答案 2 :(得分:1)
以异步方式获取数据可以通过各种方式完成。将它外包给o / r mapper可以提出你可能不想处理的挑战,因为它并没有真正使你的代码变得更简单。主要问题是你必须有一个在o / r映射器完成提取时通知的机制,因此通知调用者数据准备就绪。
这并不比自己创建一个线程复杂,并从该线程调用o / r mapper的fetch逻辑。
当您声明要创建一个应该响应的Web服务时,您必须意识到调用者在Web服务之外并等待数据。 Iow:如果调用者使用webservice获取数据,它已经是异步的,因为其他客户端仍然可以调用webservice:原始调用者的请求在另一个线程上处理,获取数据的逻辑在内部运行线程,然后将数据返回给调用者。
使用异步方法在这里是没有用的,因为否则必须在数据准备好时通知调用者,这需要从Web服务推送到客户端,这需要客户端保持连接到Web服务。无论如何都要取得。
异步数据库交互不是你可以抛出的神奇东西,因此它会变得更具响应性。异步数据库交互可以使调用者同时执行其他操作。但是,如果已经没有必要,那么您不需要开始异步数据库交互,这将使您的代码变得更加复杂。
答案 3 :(得分:1)
虽然我不确定他们是否开箱即用,但您可以使用基于模板的.NetTiers。您只需将异步部件添加到模板即可。这至少可以消除你必须维护样板代码和裸SQL查询。这个blog显示了如何向MS Enterprise库添加异步调用(如果您选择,.NetTiers可以使用)。
截至2008年12月中旬,LLBLGen Pro本身不支持异步调用。目前Genome也没有。 Telerik似乎也没有。几乎只是搜索他们的文档,并寻找async或以begin开头的方法,因为这是模式。
我让其他答案说明这是不是一个好主意......
答案 4 :(得分:0)
Nhibernate似乎比LinqToSQL更容易实现Async。见this
我个人会做的就是使用我喜欢的东西(因为我没有使用NHibernate,我会担心学习曲线和潜在的问题,所以我宁愿使用类似LINQtoSQL或定制的数据访问层)和包装它位于WCF LOB Adapter的自己的网络服务中。
如果您真的不想自己编写代码,可以使用ADO.NET Data Services,这基本上与实体框架相同。
答案 5 :(得分:0)
听起来你错过了一些索引。
或者您需要将数据库设计转移到OLAP模型。
如果不是这样的话。