Zsolt Madlen Ответов: 1

Ошибка Nullreference с простой копией вставки entity framework


У меня есть старая база данных, и я хочу добавить значения из нее в новую базу данных. Я сделал 2 DbContext с новым ключевым словом, но он все еще дает мне нулевую ошибку ссылки.

static void Main(string[] args)
{
    var newdb = new NewDbContext();
    var olddb = new OldDbContext();


    foreach (var nm in olddb.names)
    {
        newdb.Names.Add(new Name { NameId = nm.ID, Name1 = nm.name1 });

    }

    newdb.SaveChanges();
}


Что я уже пробовал:

Я попробовал вышеприведенный вариант. И просто для уточнения newdb находится в отдельной библиотеке dll, а старый - это основной clapp. может быть, мне нужно какое-то приложение.settings?

Sergey Alexandrovich Kryukov

В каком направлении?
—СА

Zsolt Madlen

новые имена.Добавить(новое название { идентификатора = Нм.Идентификатор Имя1 = Нм.ФИО1 });

Sergey Alexandrovich Kryukov

Хм... Используйте отладчик, и вы увидите, что не так.
—СА

1 Ответов

Рейтинг:
6

Sergey Alexandrovich Kryukov

Вам действительно нужно научиться справляться с такими ситуациями во всех случаях, самостоятельно.

Не беспокоиться. Это один из самых простых случаев для обнаружения и исправления. Это просто означает, что некоторый член / переменная некоторого ссылочного типа разыменовывается с помощью и своих экземпляров (нестатических) членов, что требует, чтобы этот член / переменная не была нулевой, но на самом деле она кажется нулевой. Просто запустите его в отладчике, он остановит выполнение, при котором возникает исключение. Поставьте точку останова на этой строке, перезапустите приложение и снова перейдите к этой точке. Оцените все ссылки, включенные в следующую строку, и посмотрите, какая из них пустая, хотя она не должна быть нулевой. После того, как вы это выясните, исправьте код: либо убедитесь, что член / переменная правильно инициализирована ненулевой ссылкой, либо проверьте ее на null и, в случае null, сделайте что-нибудь еще.

Пожалуйста, смотрите также: хотите отобразить следующую запись при нажатии кнопки. но получил ошибку в том случае, если условие следующей функции записи "ссылка на объект не установлена на экземпляр объекта".

Иногда вы не можете сделать это под отладчиком по той или иной причине. Один действительно неприятный случай - это когда проблема проявляется только в том случае, если программное обеспечение построено, когда отладочная информация недоступна. В этом случае вам придется использовать более сложный способ. Во-первых, вам нужно убедиться, что вы никогда не блокируете распространение исключений, обрабатывая их молча (это преступление разработчиков против самих себя, но очень обычное). Вам нужно поймать абсолютно все исключения на самом верхнем кадре стека каждого потока. Вы можете сделать это, если будете обрабатывать исключения этого типа System.Exception В обработчике вам нужно записать всю информацию об исключениях, особенно System.Exception.StackTrace:
http://msdn.microsoft.com/en-us/library/system.exception.aspx,
http://msdn.microsoft.com/en-us/library/system.exception.stacktrace.aspx.

Трассировка стека - это просто строка, показывающая полный путь распространения исключения от оператора throw к обработчику. Читая его, всегда можно найти концы. Для ведения журнала лучше всего (в большинстве случаев) использовать класс System.Diagnostics.EventLog:
http://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.aspx.

Удачи,

—СА