SubSonic 3.0.0.2 Structs.tt

Ошибка, которую я получаю, кажется, выходит из файла Structs.tt. Я использую db Northwind и использую только таблицу Products (я исключил все остальные таблицы). Я возвращаю Json (Product.All()).

Здесь ошибка:

Обнаружена круговая ссылка при сериализации объекта типа "SubSonic.Schema.DatabaseColumn'.Here-х Трассировка стека:

Исключение System.InvalidOperationException необработанный кодом пользователя Сообщение =" A круговая ссылка была обнаружена во время сериализация объекта типа "SubSonic.Schema.DatabaseColumn". Источник = "System.Web.Extensions" StackTrace: at System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Объект o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) в System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(Объект o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) в System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(Объект o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) в System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Объект o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) в System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(Объект o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) в System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(Объект o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) в System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Объект o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) в System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(Объект o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) в System.Web.Script.Serialization.JavaScriptSerializer.SerializeEnumerable(IEnumerable enumerable, StringBuilder sb, Int32 глубина, объекты HashtableInUse, SerializationFormat serializationFormat) в System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Объект o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) в System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(Объект o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) в System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(Объект o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) в System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Объект o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) в System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(Объект o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) в System.Web.Script.Serialization.JavaScriptSerializer.SerializeEnumerable(IEnumerable enumerable, StringBuilder sb, Int32 глубина, объекты HashtableInUse, SerializationFormat serializationFormat) в System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Объект o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) в System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(Объект o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) в System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(Объект o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) в System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Объект o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) в System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(Объект o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) в System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Объект obj, вывод StringBuilder, SerializationFormat serializationFormat) в System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Объект obj, SerializationFormat serializationFormat) в System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Объект obj) в System.Web.Mvc.JsonResult.ExecuteResult(ControllerContext контекста) в System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) в System.Web.Mvc.ControllerActionInvoker <. > C__DisplayClass11.b__e() в System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter фильтр, ResultExecutingContext preContext, продолжение Func1) при System.Web.Mvc.ControllerActionInvoker <. > C__DisplayClass11 <. > C__DisplayClass13.b__10() в System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext ControlContext, IList1, ActionResult actionResult) в System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) в System.Web.Mvc.Controller.ExecuteCore() в System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) в System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) в System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext) в System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext) в System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext httpContext) в System.Web.Mvc.MvcHttpHandler.VerifyAndProcessRequest(IHttpHandler httpHandler, HttpContextBase httpContext) в System.Web.Routing.UrlRoutingHandler.ProcessRequest(HttpContextBase httpContext) в System.Web.Routing.UrlRoutingHandler.ProcessRequest(HttpContext httpContext) в System.Web.Routing.UrlRoutingHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext контекста) в ExtJSNorthwind._Default.Page_Load (Объект отправителя, EventArgs e) в C:\Applications\Шипы\ExtJSNorthwind\ExtJSNorthwind\Default.aspx.cs: линия 18 на System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) в System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Объект отправителя, EventArgs e) в System.Web.UI.Control.OnLoad(EventArgs есть System.Web.UI.Control.LoadRecursive() в System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) InnerException:

Ответ 1

Кажется, у нас проблема с сериализацией:). Не могли бы вы добавить это как проблему в наш список? Я бы очень признателен.

Ответ 2

Это довольно легко исправить. Вам нужно просто добавить атрибут ScriptIgnore к нескольким методам в файле ActiveRecord.tt. Ниже приведены изменения, которые я сделал.

        [ScriptIgnore]
    public IList<IColumn> Columns{
        get{
            return tbl.Columns;
        }
    }

Примечание. Я также добавил атрибут к следующему методу, хотя я не знаю, нужна ли его в вашей ситуации.

        [ScriptIgnore]
    public IQueryable<<#=fk.OtherClass #>> <#=propName #>
    {
        get
        {

              var repo=<#=Namespace #>.<#=fk.OtherClass#>.GetRepo();
              return from items in repo.GetAll()
                   where items.<#=CleanUp(fk.OtherColumn)#> == _<#=CleanUp(fk.ThisColumn)#>
                   select items;
        }
    }