asp.net - ASP.NET MVC 中的 NHibernate 事务管理 - 应该如何完成?

标签 asp.net asp.net-mvc nhibernate transactions design-patterns

我正在编写一个简单的 ASP.NET MVC,使用每个请求的 session 和每个请求的事务模式(自定义 HttpModule)。 它似乎工作正常,但是......性能很糟糕(一个简单的页面加载〜7秒)。对于每个 http 请求,图形资源(包括网站上的所有图像)都会创建一个事务,这似乎会延迟加载时间(如果没有事务,每个图像的加载时间约为 1-10 毫秒,而事务则超过 1 秒) 。 在 ASP.NET MVC + NH 堆栈中管理事务的正确方法是什么?

当我将所有事务放入我的存储库方法中时,由于一些不明原因,我在 NProf 中收到“隐式事务”警告(SQL 语句在事务外部执行,即使在代码 session.Save()/Update() 中也是如此)/etc 方法是在事务“using”范围内和 transaction.Commit() 调用之前调用的)顺便说一句,隐式事务真的很糟糕吗?

最佳答案

当您未将语句放入事务中时,就会发生隐式事务。隐含的是,如果您没有显式声明事务,则每个语句都在其自己的事务中运行。所以是的,这很糟糕。 那么糟糕?我对你正在做的事情了解不够,无法做出判断。

我对每个请求的 session 做了同样的事情,但我没有得到任何接近相同的性能数字。我建议考虑为 NHibernate 打开 log4net 并看看它在做什么。您的应用程序应该只创建一次 session 工厂和代理工厂(管理 session 工厂将是我使用单例的少数几个地方之一)。这确实是我能想到的唯一可能导致这种情况的原因。

关于asp.net - ASP.NET MVC 中的 NHibernate 事务管理 - 应该如何完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2581670/

相关文章:

c# - 用asp.net 5 应用程序部署源代码有什么好处?

asp.net-mvc - 在 View T4 模板中获取 Controller 名称

c# - 在 NHibernate 中制作数据访问方法的最佳方法是什么?

asp.net - 使用 ASP.NET 成员资格提供程序限制对 WCF REST (webHttpBinding) 服务的访问?

c# - 无法在 LoginView LoggedIn 模板中找到控件

asp.net - 使用 LINQ 和 Entity Framework 出现错误 "No best type found for implicitly-typed array"

asp.net - IIS7 403-拒绝访问

javascript - MVC 3 使用 dropdownlist 和 ajax 获得新模型

.net - NHibernate - 从聚合中选择完整记录

wcf - 在事务提交之前触发 Spring AfterReturningAdvice