c# - TimeOut Expired 自带 SetResultTransformer() 方法

标签 c# nhibernate

我的 NH 查询

exec sp_executesql N'IF @p0 = 1 SET @p1 = DATEADD(d, 1, @p1)   
SELECT b.fInvoiceID,  
b.fItemID,  
b.fAccount,  
e.fName AccountName,  
b.fDescription,  
b.fAmount,  
c.fCode CTCode,  
f.fDescription CTCodeName,  
c.fDescription CTDescription,  
c.fAmount CTAmount  
FROM         tAPInvoice       a   
INNER JOIN tAPInvoiceDetail b ON a.fInvoiceID = b.fInvoiceID  
INNER JOIN tSCLedgerAccount e ON b.fAccount = e.fAccount AND a.fCompanyID = e.fCompanyID   
LEFT JOIN  tCTActual        c ON b.fItemID = c.fAPItemID  
LEFT JOIN  tCTCode          f ON c.fCode = f.fCode AND c.fProjectID = f.fProjectID  
LEFT JOIN  tAPPayment       p ON a.fInvoiceID = p.fInvoiceID  
LEFT JOIN  tBACheck         d ON p.fCheckID = d.fCheckID  
INNER JOIN tAPVendor        v ON v.fVendorID = a.fVendorID  
WHERE   
((@p3 = ''Fully Paid''   AND a.fPaid = 1 AND a.fVoid = 0  ) OR   
(@p3 = ''Part Paid''    AND a.fPartPaid = 1 AND a.fVoid = 0  ) OR   
(@p3 = ''Payment Made''   AND a.fPartPaid = 1 AND a.fVoid = 0  ) OR   
(@p3 = ''Payment Made'' AND a.fPaid = 1   AND a.fVoid = 0                   ) OR   
(@p3 = ''Pending''   AND a.fPaid = 0 AND a.fPartPaid = 0 AND a.fVoid = 0 AND a.fPosted = 0 ) OR   
(@p3 = ''Posted''    AND a.fPosted = 1 ) OR   
(@p3 = ''Unpaid''  AND a.fPaid = 0 AND a.fPartPaid = 0 AND a.fVoid = 0  ) OR   
(@p3 = ''Voided''  AND a.fVoid = 1 ) OR   
(@p3 = ''All'' ))  
AND (@p12 = p.fPaymentType OR @p12 = -1)  
AND (CASE WHEN @p0 = 1   
THEN   a.fEntryDate  
ELSE CASE @p3  
WHEN ''Fully Paid''   THEN d.fDate  
WHEN ''Part Paid''    THEN d.fDate  
WHEN ''Payment Made'' THEN d.fDate  
WHEN ''Voided''       THEN a.fVoidDate  
ELSE                     a.fPostDate  
END  
END BETWEEN @p16 AND @p1)  
AND (a.fCompanyID = @p18 OR @p18 IS NULL)  
AND (a.fPropertyID =@p20 OR @p20 IS NULL)   
AND (a.fVendorID = @p22 OR @p22 IS NULL)   
AND (a.fUser = @p24 OR @p25 IS NULL)  
AND (v.fActive = @p26 OR @p26 IS NULL)  
ORDER BY a.fInvoiceNo ASC, b.fItemID, c.fCTID   ',N'@p0 bit,@p1 datetime,@p3 nvarchar(4000),@p12 int,@p16 datetime,@p18 nvarchar(4000),@p20 nvarchar(4000),@p22 nvarchar(4000),@p24 nvarchar(4000),@p25 nvarchar(4000),@p26 bit',@p0=0,@p1='2012-10-31 20:35:23',@p3=N'Fully Paid',@p12=-1,@p16='2012-07-01 20:35:23',@p18=NULL,@p20=NULL,@p22=NULL,@p24=NULL,@p25=NULL,@p26=1

下面是我的c#代码

sqlQuery =
          session.CreateSQLQuery(finalQuery).
          SetGuid("CompanyID", Company.FCompanyID).
          SetString("PropertyID", null).
          SetString("VendorID", null).
          SetDateTime("StartDate", StartDate).
          SetDateTime("EndDate", EndDate).
          SetString("Username", User).
          SetInt32("PaymentMethod", PaymentMethod).
          SetString("InvoiceType", invoicetype).
          SetString("UserName", User).
          SetBoolean("UseEntryDate", UserEntryDate).
          SetParameter("Active", Active);

在此之后我使用 SetResultTransformer 方法

var result = sqlQuery.SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean<ReportData_APBI_Detail>()).List();

上面一行 SetResultTransformer() 方法抛出异常消息

{“超时已过。超时时间已过,操作完成或服务器未响应。”

即使我在 Sql Server 上运行此查询,它也会在 48 秒内为我提供输出。

最佳答案

看起来运行时间超过了默认的命令超时,你可以配置它,例如2分钟......

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
  <property name="command_timeout">120</property>
 </session-factory>
</hibernate-configuration>

关于c# - TimeOut Expired 自带 SetResultTransformer() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20379405/

相关文章:

c# - 使用 REST API 的 PayPal 批量支付

c# - 为什么.Net 框架不使用 Guard 类(或等效类)作为方法参数

c# - 使用 Compact Framework 在数据网格中设置列宽

NHibernate 组件映射 VS IUserType

nhibernate - NHibernate 中的 Configuration.AddAssembly ("") 有什么作用?

c# - 使用 Linq 从 DataTable.Row.ItemArray 获取单元格

c# - Visual Studio 2012 中的大括号自动完成

wpf - 多次报告 log4net NHibernate.Util.ADOExceptionReporter

sql-server - 无法设置默认的 Nhibernate 隔离级别(例如通过映射)

nhibernate - 如何使用接口(interface)将 composite-id 映射到流利的 nhibernate?