【发布时间】:2015-08-29 05:00:13
【问题描述】:
我正在查看使用以下 SQL 的项目中的一些代码:
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; }
}
目前我在运行项目时遇到以下异常:
序列化类型对象时检测到循环引用 'System.Reflection.RuntimeModule'。
描述:执行过程中发生了未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。
异常详细信息:System.InvalidOperationException:循环 序列化类型对象时检测到引用 'System.Reflection.RuntimeModule'。
[InvalidOperationException:检测到循环引用,同时 序列化“System.Reflection.RuntimeModule”类型的对象。]
System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(对象 o,StringBuilder sb,Int32 深度,Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember) +2616 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(对象 o,StringBuilder sb,Int32 深度,Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember) +371 System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(对象 o,StringBuilder sb,Int32 深度,Hashtable objectsInUse, SerializationFormat(序列化格式)+819
System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(对象 o,StringBuilder sb,Int32 深度,Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember) +2834 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(对象 o,StringBuilder sb,Int32 深度,Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember) +371 System.Web.Script.Serialization.JavaScriptSerializer.SerializeEnumerable(IEnumerable 可枚举,StringBuilder sb,Int32 深度,Hashtable objectsInUse, SerializationFormat(序列化格式)+186
System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(对象 o,StringBuilder sb,Int32 深度,Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember) +2782 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(对象 o,StringBuilder sb,Int32 深度,Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember) +371 System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(对象 o,StringBuilder sb,Int32 深度,Hashtable objectsInUse, SerializationFormat(序列化格式)+819
System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(对象 o,StringBuilder sb,Int32 深度,Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember) +2834 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(对象 o,StringBuilder sb,Int32 深度,Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember) +371 System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(对象 o,StringBuilder sb,Int32 深度,Hashtable objectsInUse, SerializationFormat(序列化格式)+819
System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(对象 o,StringBuilder sb,Int32 深度,Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember) +2834 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(对象 o,StringBuilder sb,Int32 深度,Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember) +371 System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(对象 o,StringBuilder sb,Int32 深度,Hashtable objectsInUse, SerializationFormat(序列化格式)+819
System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(对象 o,StringBuilder sb,Int32 深度,Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember) +2834 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(对象 o,StringBuilder sb,Int32 深度,Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember) +371 System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(对象 o,StringBuilder sb,Int32 深度,Hashtable objectsInUse, SerializationFormat(序列化格式)+819
System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(对象 o,StringBuilder sb,Int32 深度,Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember) +2834 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(对象 o,StringBuilder sb,Int32 深度,Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember) +371 System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(对象 o,StringBuilder sb,Int32 深度,Hashtable objectsInUse, SerializationFormat(序列化格式)+819
System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(对象 o,StringBuilder sb,Int32 深度,Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember) +2834 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(对象 o,StringBuilder sb,Int32 深度,Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember) +371 System.Web.Script.Serialization.JavaScriptSerializer.Serialize(对象 obj,StringBuilder 输出,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,Func1 continuation) +2421 续)+242
System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +21 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func
System.Web.Mvc.c__DisplayClass1c.b__19() +21 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter 过滤器,ResultExecutingContext preContext,Func1 continuation) +2421 过滤器,ActionResult actionResult) +175
System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +21 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList
System.Web.Mvc.Async.c__DisplayClass2a.b__20() +89 System.Web.Mvc.Async.c__DisplayClass25.b__22(IAsyncResult asyncResult) +102 System.Web.Mvc.Async.WrappedAsyncResult1.End() +57 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +431.End() +62
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
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +57 System.Web.Mvc.Async.c__DisplayClass4.b__3(IAsyncResult ar) +23 System.Web.Mvc.Async.WrappedAsyncResult1.End() +621.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
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 step, Boolean& completedSynchronously) +155
startDay 和 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 解决方案?
非常感谢
【问题讨论】: