2015-08-29 24 views
0

我有一個項目,我在看它是使用SQL folllowing一些代碼:一把umbraco數據庫.Fetch <>()代碼錯誤 - SQL,C#,ASP.NET

List<RoomAllotmentViewModel> listRoomAllotment = db.Fetch<RoomAllotmentViewModel> 
        (
         "SELECT Id" + 
         ", CONVERT(DATETIME, CONVERT(VARCHAR(4),[Year],0) + '-' + CONVERT(VARCHAR(2),[Month],0) + '-' + CONVERT(VARCHAR(2),[Date],0),120) AllotmentDate" + 
         ", RoomTypeId" + 
         ", (SELECT RoomType FROM RoomType R WHERE A.RoomTypeid = R.Id) RoomTypeName" + 
         ", (Alloted - Booked) Available" + 
         ", Price" + 
         " FROM Room_Allotment A" + 
         " WHERE" + 
         " CONVERT(DATETIME, CONVERT(VARCHAR(4),[Year],0) + '-' + CONVERT(VARCHAR(2),[Month],0) + '-' + CONVERT(VARCHAR(2),[Date],0),120) >= '" + startDay.ToString("yyyy-MM-dd") + "'" + 
         " AND CONVERT(DATETIME, CONVERT(VARCHAR(4),[Year],0) + '-' + CONVERT(VARCHAR(2),[Month],0) + '-' + CONVERT(VARCHAR(2),[Date],0),120) < '" + endDay.ToString("yyyy-MM-dd") + "'" + 
         " ORDER BY AllotmentDate, RoomTypeId"); 

,模式不實體類:

public class RoomAllotmentViewModel 
{ 
    public int Id { get; set; } 
    public DateTime AllotmentDate { get; set; } 
    public int RoomTypeId { get; set; } 
    public string RoomTypeName { get; set; } 
    public int Available { get; set; } 
    public float Price { get; set; } 
} 

有實體類的RoomType和Room_Allotment表:

[TableName("RoomType")] 
[PrimaryKey("Id", autoIncrement = true)] 
[ExplicitColumns] 
public class RoomType 
{ 
    [Column] 
    public int Id { get; set; } 

    [Column] 
    [Required(ErrorMessage = "Please provide RoomType", AllowEmptyStrings = false)] 
    public string RoomType { get; set; } 
} 


[TableName("Room_Allotment")] 
[PrimaryKey("Id", autoIncrement = true)] 
public class Room_Allotment 
{ 
    public Int64 Id { get; set; } 
    public int Year { get; set; } 
    public int Month { get; set; } 
    public int Date { get; set; } 
    public int RoomTypeId { get; set; } 
    public int Alloted { get; set; } 
    public int Booked { get; set; } 
    public float Price { get; set; } 
} 

目前我得到以下前ception運行項目:

在序列化類型 「System.Reflection.RuntimeModule」的目的時檢測到循環引用。

描述:在執行 當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。

異常詳細信息:System.InvalidOperationException:在序列化類型爲 'System.Reflection.RuntimeModule'的對象時檢測到循環 引用。

[InvalidOperationException異常:而 序列化類型 'System.Reflection.RuntimeModule' 的目的時檢測到循環引用]
System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(對象 O,StringBuilder的SB,的Int32深度,哈希表objectsInUse, serializationFormat serializationFormat,的MemberInfo currentMember) 2616 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(對象 O,StringBuilder的SB,深度Int,哈希表objectsInUse, serializationFormat serializationFormat,的MemberInfo currentMember) 371 System.Web.Script.Serialization.JavaScri ptSerializer.SerializeCustomObject(對象 O,StringBuilder的SB,深度Int,哈希表objectsInUse, SerializationFormat serializationFormat)819
System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(對象 O,StringBuilder的SB,深度Int,哈希表objectsInUse, serializationFormat serializationFormat,的MemberInfo currentMember) 2834 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(對象 O,StringBuilder的SB,深度Int,哈希表objectsInUse, serializationFormat serializationFormat,的MemberInfo currentMember) 371 System.Web.Script .Serialization.JavaScriptSerializer.SerializeEnumerable(IEnumerable e可數,StringBuilder的SB,深度Int,哈希表objectsInUse, SerializationFormat serializationFormat)186
System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(對象 O,StringBuilder的SB,深度Int,哈希表objectsInUse, SerializationFormat serializationFormat,的MemberInfo currentMember ) 2782 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(對象 O,StringBuilder的SB,深度Int,哈希表objectsInUse, serializationFormat serializationFormat,的MemberInfo currentMember) 371 System.Web.Script.Serialization.JavaScriptSerializer。SerializeCustomObject(對象 O,StringBuilder的SB,深度Int,哈希表objectsInUse, SerializationFormat serializationFormat)819
System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(對象 O,StringBuilder的SB,深度Int,哈希表objectsInUse, SerializationFormat serializationFormat,的MemberInfo currentMember) 2834 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(對象 O,StringBuilder的SB,深度Int,哈希表objectsInUse, SerializationFormat serializationFormat,的MemberInfo currentMember) 371 System.Web.Script.Serialization .JavaScriptSerializer.SerializeCustomObject(Object o,StringBuilder SB,深度Int,哈希表objectsInUse, SerializationFormat serializationFormat)819
System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(對象 O,StringBuilder的SB,深度Int,哈希表objectsInUse, SerializationFormat serializationFormat,的MemberInfo currentMember) + 2834 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(對象 O,StringBuilder的SB,深度Int,哈希表objectsInUse, serializationFormat serializationFormat,的MemberInfo currentMember) 371 System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(對象 o,StringBuilder sb,Int32深度,Hashtable objectsInUse, Seria lizationFormat serializationFormat)819
System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(對象 O,StringBuilder的SB,深度Int,哈希表objectsInUse, SerializationFormat serializationFormat,的MemberInfo currentMember) 2834 System.Web.Script.Serialization。 JavaScriptSerializer.SerializeValue(對象 O,StringBuilder的SB,深度Int,哈希表objectsInUse, serializationFormat serializationFormat,的MemberInfo currentMember) 371 System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(對象 O,StringBuilder的SB,深度Int,哈希表objectsInUse, SerializationFormat serializationFormat)+819
System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(對象 O,StringBuilder的SB,深度Int,哈希表objectsInUse, SerializationFormat serializationFormat,的MemberInfo currentMember) 2834 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(對象 O,StringBuilder的SB,深度Int,哈希表objectsInUse, serializationFormat serializationFormat,的MemberInfo currentMember) 371 System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(對象 O,StringBuilder的SB,深度Int,哈希表objectsInUse, serializationFormat serializationFormat) +819
System.Web.Script.Serialization.JavaScriptSerializer.S erializeValueInternal(對象 O,StringBuilder的SB,深度Int,哈希表objectsInUse, SerializationFormat serializationFormat,的MemberInfo currentMember) 2834 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(對象 O,StringBuilder的SB,深度Int,哈希表objectsInUse, SerializationFormat serializationFormat,的MemberInfo currentMember) 371 System.Web.Script.Serialization.JavaScriptSerializer.Serialize(對象 OBJ,StringBuilder的輸出,SerializationFormat serializationFormat) 57 System.Web.Script.Serialization.JavaScriptSerializer.Serialize(對象 OBJ ,SerializationFormat serializationFormat)+83
System.Web.Script。Serialization.JavaScriptSerializer.Serialize(對象 OBJ)44 System.Web.Mvc.JsonResult.ExecuteResult(ControllerContext 上下文)325
System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext,的ActionResult的ActionResult)13
System.Web.Mvc。 <> c__DisplayClass1a.b__17() 23 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter 濾波器,ResultExecutingContext preContext,函數功能1 continuation) +242
System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +21 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func
1續)242
System.Web.Mvc。 <> c__DisplayClass1c.b__19() 21 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter 濾波器,ResultExecutingContext preContext,函數功能1 continuation) +242
System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +21 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList
1個過濾器,的ActionResult的ActionResult)175
System.Web.Mvc.Async。 <> c__DisplayClass2a.b__20() +89 System.Web.Mvc.Async。 <> c__DisplayClass25.b__22(IAsyncResult的 asyncResult)102 System.Web.Mvc.Async.WrappedAsyncResult 1.End() +57 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +43
System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +14
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23 System.Web.Mvc.Async.WrappedAsyncResult
1.End()62
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult的asyncResult)57 的System.Web .Mvc.Async。 <> c__DisplayClass4.b__3(IAsyncResult的 AR)23 System.Web.Mvc.Async.WrappedAsyncResult 1.End() +62
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +47
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +25
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23 System.Web.Mvc.Async.WrappedAsyncResult
1.End()62
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult的asyncResult) 47的System.Web .Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult的 結果)9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 9651688 System.Web.HttpApplication.ExecuteStep(IExecutionStep步驟,布爾&已完成同步)+155

變量朝九特派和endday指定有:

var startDay = DateTime.ParseExact(arrival, "dd/MM/yyyy", CultureInfo.InvariantCulture); 
var endDay = DateTime.ParseExact(departure, "dd/MM/yyyy", CultureInfo.InvariantCulture); 

在上面的例外,這些變量的值是:

startDay: {30/08/2015 00:00:00} 
endDay: {31/08/2015 00:00:00} 

「DB」和它的方法是:ApplicationContext.Current.DatabaseContext.Database;它是一把umbraco核心庫的一部分。

提前爲任何多餘的信息道歉。基本上我的問題是:

  • 爲什麼會發生異常?
  • 是否有LINQ解決方案?

非常感謝

回答

1

這聽起來像這樣的例外是最有可能發生的事情,因爲你是在執行該查詢得到一個例外。第一個異常之後會發生什麼,它會嘗試使用JSON序列化程序序列化此異常對象,從而導致您實際看到的循環引用異常。

因此,您需要做的是實際找到初始異常並解決導致它發生的問題。

我會看看/App_Data/Logs/中的日誌,看看是否有任何線索,看是否有什麼例外實際發生在第一位。它可能非常簡單 - 即使在嘗試序列化最簡單的異常時也會爆炸,因爲異常對象的複雜結構無法用開箱即用的序列化程序設置進行序列化。

如果您需要長期運行更可行的解決方案,我相信可以創建一個ExceptionConverter並將其註冊到序列化程序使用的轉換程序列表中。這將需要序列化實際的異常消息,以便您可以真正看到錯誤是什麼,而不是獲取該循環異常。然而這不是我在umbraco解決方案中所做的,所以你可能需要Google。