Мощные инструменты Entity Framework: ошибка «Ссылка на объект не установлена для экземпляра объекта»

#c# #asp.net-mvc #entity-framework #dbcontext

#c# #asp.net-mvc #entity-framework #dbcontext

Вопрос:

Короткий и приятный:

Когда я щелкаю правой кнопкой мыши по своему классу DbContext и выбираю «Просмотреть модель данных объекта (только для чтения)», я получаю всплывающее диалоговое окно с надписью «Ссылка на объект не установлена для экземпляра объекта», это не отображается как исключение или ошибка вывода при обычной компиляции и запуске моего кода;На самом деле, кажется, что отношения и классы работают нормально, когда я запрашиваю базу данных из консольного приложения, в котором я все тестирую.

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

Более длинная версия:

Я работал над переключением модели данных разработчика EF database-first на code-first из существующей модели базы данных. Существует ~ 80 объектов, которые я сопоставил с классами POCO, и определил по крайней мере столько же отношений, используя fluent API. Я начал с классов, построенных из каркасов, запустив мастер Visual Studio в базе данных, и это сработало нормально, но я провел масштабную рефакторинг, чтобы заставить базу кода работать с новыми моделями.

В любом случае, сейчас я тестирую модель данных, добавляя по одному объекту за раз, чтобы я знал, какие объекты и отношения POCO вызывают проблемы. Я хотел бы использовать мощные инструменты EF, чтобы помочь проверить / визуализировать модель, но они выдают ошибку, которую я описал выше. Опять же, любая помощь приветствуется.

Комментарии:

1. По моему опыту, при первом использовании EF Power Tools и Database вам следует щелкнуть правой кнопкой мыши в проекте, выбрать подменю EF, затем выбрать «Обратный инжиниринг». Это сгенерирует все необходимые модели и DbContext.

2. Это то, что я сделал, как я сказал в длинном объяснении. Однако с этими моделями были проблемы, связанные как с взаимодействием с ASP.NET приложение, которое их использует, и отношения между ними. Это усугубляется тем фактом, что это устаревшая база данных с несколькими рудиментарными компонентами и общим отсутствием соответствия соглашению.

3. Извините, еще одна вещь, поскольку SO не позволит мне отредактировать мой первый комментарий. Мощные инструменты EF работают, если я запускаю их в пустом решении / проекте, который содержит только «обратный инженерный» DbContext и models. К сожалению, этот процесс полностью испортил большинство отношений и именование свойств; поэтому модель не может получить доступ к базе данных.

4. Если база данных «нетрадиционная», вам нужно будет исправить модели и, возможно, использовать EF fluent API для настройки указанных моделей. EF Fluent API

5. Как я уже сказал в своем вопросе, я уже это делаю. Но это не то, с чем я ищу помощи, я ищу способы визуализации / проверки моей модели, а EF power tools не работает! Несмотря на это, я ценю предложенное вами руководство, спасибо.

Ответ №1:

Этот пост указал мне правильное направление

EF Power Tools очень чувствителен к строкам подключения. В моем случае я обнаружил, что СПОСОБ ссылки на строку conn в классе DbContext имеет значение:

     internal class MyContext : DbContext
    {
    //Both Migrations and EF PowerTools were okay with this…
    public MyContext() : base(“name=MyConnStringName”)

    //Migrations was okay with this, but EF PowerTools Throws “object reference not set to an instance of an object” in a dialog box… Very confusing :s
    public MyContext() : base(ConfigurationManager.ConnectionStrings[“MyConnStringName”].ConnectionString)