2016-09-10 5 views
1

Я знаю, что есть несколько других сообщений об этом исключении, но ни один из них не помог мне.Как минимум один объект должен реализовывать IComparable - работает на локальной машине, но не на сервере

Каждое из трех решений работает на моей локальной машине, но не в Live-System/на сервере.

По мере увеличения количества PackageViewModels, первое решение покинуло работу. - Внедрено второе решение. Пользователи добавили еще два элемента, а второе решение также оставило работу. Реализована третья, которая никогда не работала на сервере. : D

EDIT: - Дополнительная информация ... Функции GetTemplateTypes(), GetTemplateCategories() и GetPackages() возвращают списки моделей, которые запрашиваются через ADO.net raw SQL с SQL Server 2008. Эти функции всегда возвращая запрошенные данные, и никогда не возникает какой-либо вид исключения.

public ActionResult Package_Read([DataSourceRequest] DataSourceRequest request) 
    { 
     try 
     { 
      var templateTypes = DBRepository.GetTemplateTypes(); 
      var templateCategories = DBRepository.GetTemplateCategories(); 
      var templatePackages = DBRepository.GetPackages(); 

// Third Solution, never worked 

      List<PackageViewModel> packageViewModels = new List<PackageViewModel>(); 

      foreach (var templatePackage in templatePackages) 
      { 
       PackageViewModel packageViewModel = new PackageViewModel(); 
       packageViewModel.val1= templatePackage.val1; 
       packageViewModel.val2= templatePackage.val2; 
       packageViewModel.ID = templatePackage.ID; 
       packageViewModel.Type = 
        (from t in templateTypes where t.ID == templatePackage.ID select t).First(); 
       packageViewModel.Category = (from t in templateCategories 
        where t.Category_ID == templatePackage.Category_ID 
        select t).First(); 
       packageViewModels.Add(packageViewModel); 
      } 


// Second Soltuion - Worked for an amount up to 14 packageViewModels 

      var packageViewModels = templatePackages.Select(p => new PackageViewModel 
      { 
       VPackage_ID = p.VPackage_ID, 
       VType = (from t in templateTypes where t.ID == p.VType_ID select t).Single(), 
       VCategory = (from t in templateCategories 
        where t.VCategory_ID == p.VCategory_ID select t).Single(), 
       val1 = p.val1, 
       val2 = p.val2 
      }).ToList(); 




// First Solution - Worked till a specific number of PackageViewModels (about 12) 

      IEnumerable<PackageViewModel> packages = DBRepository.GetPackages() 
       .Select(p => new PackageViewModel 
       { 
        VPackage_ID = p.VPackage_ID, 
        VType = DBRepository.GetTemplateType(p.VType_ID), 
        VCategory = DBRepository.GetTemplateCategory(p.VCategory_ID), 
        val1 = p.val1, 
        val2 = p.val2, 
       }); 


      var jsonResult = Json(packageViewModels.ToDataSourceResult(request), JsonRequestBehavior.AllowGet); 
      jsonResult.MaxJsonLength = int.MaxValue; 
      return jsonResult; 
     } 
     catch (Exception ex) 
     { 
      Util.logger.Error(ex.Message); 
      return new JsonResult(); 
     } 
    } 

У меня абсолютно нет идеи, как справиться с этим.

Заранее благодарен!

+0

Где ошибка, из которой выдается ошибка? Когда вы тестируете локально, вы используете тот же источник данных, что и при сбое? Не могли бы вы отправить трассировку стека ошибки? – swestner

ответ

1
ERROR 2016-09-12 16:09:28,695 890063ms Util     Package_Read    
At least one object must implement IComparable 
ERROR 2016-09-12 16:09:28,696 890064ms Util     Package_Read   - mscorlib 
ERROR 2016-09-12 16:09:28,697 890065ms Util     Package_Read    
at System.Collections.Comparer.Compare(Object a, Object b) 
at System.Collections.Generic.ObjectComparer`1.Compare(T x, T y) 
at System.Linq.EnumerableSorter`2.CompareKeys(Int32 index1, Int32 index2) 
at System.Linq.EnumerableSorter`2.CompareKeys(Int32 index1, Int32 index2) 
at System.Linq.EnumerableSorter`1.QuickSort(Int32[] map, Int32 left, Int32 right) 
at System.Linq.EnumerableSorter`1.Sort(TElement[] elements, Int32 count) 
at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__1.MoveNext() 
at System.Linq.Enumerable.<SkipIterator>d__30`1.MoveNext() 
at Kendo.Mvc.Extensions.QueryableExtensions.Execute[TModel,TResult](IQueryable source, Func`2 selector) 
at Kendo.Mvc.Extensions.QueryableExtensions.CreateDataSourceResult[TModel,TResult](IQueryable queryable, DataSourceRequest request, ModelStateDictionary modelState, Func`2 selector) 
at Kendo.Mvc.Extensions.QueryableExtensions.ToDataSourceResult(IQueryable queryable, DataSourceRequest request, ModelStateDictionary modelState) 
at Kendo.Mvc.Extensions.QueryableExtensions.ToDataSourceResult(IQueryable enumerable, DataSourceRequest request) 
at Kendo.Mvc.Extensions.QueryableExtensions.ToDataSourceResult(IEnumerable enumerable, DataSourceRequest request) 

Ошибка была брошена

var jsonResult = Json(packageViewModels.ToDataSourceResult(request), JsonRequestBehavior.AllowGet); 

нашел решение, изменили сортировки кендо UI сетки в представлении. Все еще не понимаю, почему работают разные Решения. Кажется, все работает сейчас.

 Смежные вопросы

  • Нет связанных вопросов^_^