2013-04-25 1 views
2

Я столкнулся с проблемой при переходе от локального сервера развития на местном сервере IIS (ASP.NET MVC4) с помощью следующей контроллера Метод:DbContext с помощью придаточного в Asp.Net Json-Call

public JsonResult GetJsonData(string Context, string Language) 
    { 
     using (KeyValueDBContext db = new KeyValueDBContext()) 
     { 

      var entries = from u in db.KeyValues 
          where ((u.Context == Context) && (u.Language == Language)) 
          select u; 

      return Json(entries, JsonRequestBehavior.AllowGet); 
     } 

    } 

Используя локальный сервер, я получил данные при вызове метода из Javascript без проблем. Метод извлекает коллекцию в основном пар Key-Value из репозитория базы данных и отправляет их клиенту). После перехода на IIS я получил исключение, в котором говорилось, что dbcontext уже был удален (хотя предложение use завершается после return-statement). (NB: Visual Studio также не удалось найти JSONSerializer.cs по какой-то причине, но только тогда, когда возникла ошибка). Переход к следующей версии решена проблема полностью:

public JsonResult GetJsonData(string Context, string Language) 
    { 
     KeyValueDBContext db = new KeyValueDBContext(); 
     var entries = from u in db.KeyValues 
        where ((u.Context == Context) && (u.Language == Language)) 
        select u; 

     return Json(entries, JsonRequestBehavior.AllowGet); 
    } 

В обоих случаях это было с помощью-блок:

using System; 
    using System.Collections.Generic; 
    using System.Data; 
    using System.Data.Entity; 
    using System.Linq; 
    using System.Web; 
    using System.Web.Mvc; 
    using beepov4.Models; // project-models 

Мой вопрос: Является ли это приемлемым способом использовать DbContext с целью JSON-вызовы (и отбрасывание предложения-использования), или есть какая-то проблема или скрытая проблема, о которой я должен знать?

ответ

4

Попробуйте чтение entries в память с entries.ToList() перед передачей их Json():

+0

Да, это было то, что я искал. «ToList()» заставляет запрос выполняться немедленно, и в этом случае при дипоризации dbcontext не создает проблем. Я попробовал альтернативы, введя результат в списки пользовательских типов, но это прямолинейно. Благодарю. – jank

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