Не удается прочитать данные с помощью Entity Framework 6 с использованием IIS10 - PullRequest
0 голосов
/ 25 августа 2018

Веб-приложение Asp.net MVC 5 с Entity Framework 6 опубликовано и размещено на IIS 10.

После публикации я могу войти и зарегистрироваться, используя встроенные сервисы MVC. Однако при обращении к данным EF в таблице базы данных все возвращают пустые результаты, и добавление исключения не вызовет никаких исключений.

    IQueryable<Record> records=null;
        try
        {
            records= from m in _context.Record
                           select m;

        }
    catch (NullReferenceException e)
    {
        return Json(JsonConvert.SerializeObject(e.Message, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore }));
    }
    catch (ArgumentNullException e)
    {
        return Json(JsonConvert.SerializeObject(e.Message, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore }));
    }
    catch (Exception e)
    {
        return Json(JsonConvert.SerializeObject(e, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore }));
    }
    return Json(JsonConvert.SerializeObject(records, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore }));

Был бы рад узнать, что любой параметр безопасности может решить.

1 Ответ

0 голосов
/ 27 августа 2018

Начните проще и используйте отладчик.

var query = _context.Records.AsQueryable();
var records = query.ToList();
return Json(records, JSonRequestBehavior.AllowGet);

если вы предпочитаете синтаксис linq:

var query = from r in _context.Records
            select r;

... установите точку останова на var records = query.ToList(); и убедитесь, что вы получаете результаты. Если вы получаете результаты, то проблема может заключаться в том, что IQueryable передает Json. Если вы все еще не получаете результаты, дважды проверьте строку подключения.

Я рекомендую избегать передачи сущностей обратно для просмотра логики, это просто чревато проблемами, которые возникают при ленивой загрузке и работе с отключенными сущностями и повторным связыванием сущностей с DbContexts в двустороннем цикле. Я использую объекты для сопоставления доменов и просмотра моделей для представления данных для представления. Преимущество состоит в том, чтобы избежать вышеупомянутых проблем с отложенной загрузкой и т. Д., А также из данных с точки зрения проводной связи, которые, как правило, не нужно отправлять каждое значение и дочернюю ссылку для каждой сущности. Модели представлений отражают данные, необходимые для представления, и могут при необходимости выравниваться из домена.

var viewModels = _context.Records
    .Select(x => new RecordViewModel
    {
        RecordId = x.RecordId,
        //...
    }).ToList();
return Json(viewModels, JSonRequestBehavior.AllowGet);

Вы можете использовать Automapper, например, чтобы помочь управлять отображением между сущностью и моделью представления.

...