OR 映射器是否提供异步方法?
-
20-08-2019 - |
题
.Net O/R(对象/关系)映射器是否提供开箱即用的异步方法?
如果可能的话,我不想为异步方法编写样板
我已经使用 CCR 框架使用异步方法推出了自己的 DAL。CCR 基本上要求我不要阻塞任何等待 IO 响应的线程。
到目前为止,我的解决方案的好处是它已降至最低限度。但随着这个项目的规模和功能不断增长,我面临着维护原始 SQL 查询和样板代码的艰巨任务。
但另一方面,如果 O/R 映射器异步方法实际上只是一个混乱的黑客,增加了奇怪的复杂性,我的情况也不会更好。
请不要关注异步编程的替代方案。
其他提示
我想你听错了。我的理解是,在你的情况下,异步执行应在架构层面,而不是ORM水平,即消息队列驱动的架构来处理。我看到的是,你的webserive只能放置一个消息在队列中,有某种背景剂确实异步处理掉队列。
由于我没有足够的信誉发表意见,并在#1我提醒将另一“答案”我会在这里留下我的评论。
利B:SQLAlchemy的?你如何使用.NET使用它???
获取数据可以以各种方式来实现。要外包给一个O / R映射器给出了你可能不希望处理,因为它并没有真正使你的代码不太复杂的挑战。主要的问题是,你必须有当获取由O / R映射器完成该通知的机制,使主叫方被告知数据已准备就绪。
这是不小于自己创建线程复杂少并调用O / R映射器的从该线程取逻辑。
正如你指出你想创建这应该是响应Web服务,你已经认识到呼叫者的web服务外,等待数据。督察:如果呼叫者使用Web服务的获取数据,它已经同步,其他客户端仍然可以调用Web服务,以及:原调用方的请求是在不同的线程来处理,逻辑来获取数据里面跑线程,然后将数据返回给调用者。
使用异步方法是没有用的在这里,因为呼叫者否则必须被通知时,数据已准备好,这需要从该web服务的客户端,这需要客户端保持连接到,只要该web服务的推送作为取反正需要。
异步突发的互动并不神奇的东西,你可以扔的东西所以它变得更加敏感。异步突发的互动可以使主叫方做其他事情的平均时间。然而,如果这已经没有必要,你不需要异步突发的互动,首先,这将使你的代码少了很多复杂。
Nhibernate的似乎是相对容易实现异步比LinqToSQL。请参阅此
个人我还能做什么,虽然是用什么我舒服(因为我没用过NHibernate的我会担心的学习曲线和潜在的问题,所以我宁愿使用类似LINQtoSQL或定制的数据访问层)和包它在 WCF的它自己的Web服务LOB适配器。
如果你真的不想要的代码,你自己,你可以只使用 ADO.NET数据服务其基本上是做为实体框架。
听起来您缺少一些索引。
或者你需要将数据库设计转向OLAP模型。
如果不是这样的话。
- 获取更多内存。
- 获得更多的CPU。
- 对表进行分区。
- 在数据库前面构建一个可以处理异步请求的包装器。它看起来像一个队列。