Как остановить импорт текущего модуля [дубликат]

Добавление случая, когда имя класса для объекта, используемого в структуре сущности, такое же, как имя класса для файла с кодировкой веб-формы.

Предположим, у вас есть веб-форма Contact.aspx, чей класс codebehind Свяжитесь с вами, и у вас есть имя объекта Contact.

Затем следующий код вызовет исключение NullReferenceException при вызове context.SaveChanges ()

Contact contact = new Contact { Name = "Abhinav"};
var context = new DataContext();
context.Contacts.Add(contact);
context.SaveChanges(); // NullReferenceException at this line

Ради полноты класса DataContext

public class DataContext : DbContext 
{
    public DbSet Contacts {get; set;}
}

и класс сущности контакта. Иногда классы сущностей являются частичными классами, так что вы можете распространять их и в других файлах.

public partial class Contact 
{
    public string Name {get; set;}
}

Ошибка возникает, когда оба класса entity и codebehind находятся в одном и том же пространстве имен. Чтобы исправить это, переименуйте класс сущности или класс codebehind для Contact.aspx.

Причина. Я все еще не уверен в причине. Но всякий раз, когда какой-либо из классов сущностей расширяет System.Web.UI.Page, возникает эта ошибка.

Для обсуждения рассмотрим NullReferenceException в DbContext.saveChanges ()

7
задан sorin 13 October 2011 в 14:07
поделиться

3 ответа

Я не знаю о каком-либо решении этого вопроса, но, я думаю, вы могли бы поместить весь свой код во внутренний модуль и импортировать его, если условие не выполнено.

5
ответ дан UncleZeiv 27 August 2018 в 17:02
поделиться

Я не знаю, как это сделать. Единственное, что я мог представить, это будет return, но это должно быть внутри функции.

1
ответ дан David Heffernan 27 August 2018 в 17:02
поделиться

Сложно сказать, не зная, какова ваша цель более высокого уровня. (Например, что такое условие? Почему это имеет значение? УВЕРЕНЫ, ЧТО У вас нет проблемы с XY? Не можете ли вы просто рассказать нам, какова ваша общая цель?) Также очень сложно сказать, не зная как модуль будет вызываться. (Как сценарий из командной строки? Импортируется другим модулем?) И это многое поможет узнать (а), почему вы пытаетесь избежать отступа (Вторая мировая война закончилась, и нам не нужны пространства для рациона более того, или, говоря более любезно, Python - это язык, который использует отступы как SYNTACTIC FEATURE, поэтому «я не могу использовать эту синтаксическую функцию» поражает многих людей как странное ограничение. Это как отказ от if-then тесты: теоретически вы могли бы работать над этим ограничением, возможно, иногда, но почему вы идете в боксерское кольцо руками за спиной?) и (б) почему вы не можете исключить исключение (нет , действительно: вы ПОЛНОСТЬЮ УВЕРЕНЫ, ЧТО ВЫ НЕБЕСНО НЕ ИСКЛЮЧАЕТЕ ЛЮБЫЕ ИСКЛЮЧЕНИЯ НА ВСЕ?).

Как бы то ни было, все, что вы действительно сделали, это спросить «как мне сделать X, учитывая условия A, B , и C? " вопрос, не указывая, почему вы хотите сделать X, или почему существуют условия A, B и C, или даже если вы на 100% уверены, что они существуют и не могут быть обработаны.

я действительно говорю: «Я не хочу ударять {TAB} 40 раз при написании функции», тогда реальная проблема в том, что вам нужен лучший текстовый редактор. Если то, что вы на самом деле говорите, - «мне посчастливилось найти отступ, чтобы быть эстетически неприятным», тогда вы должны подумать о (а), что другая сторона аргумента; то есть, почему люди Python используют отступы как синтаксис, чтобы быть полезными; (б) важны ли ваши собственные эстетические предпочтения в этом отношении, чем причины, которые вы придумали в (а); и (c), учитывая, что Python - это правильный инструмент, который вы лично используете для достижения своей собственной масштабной цели. (Это нормально, чтобы не отступать как синтаксическая функция, но это настолько фундаментально для Python, что философски противостоит ему до такой степени, что это правило является сильным признаком того, что, возможно, Python не является идеальным языком для вас, чтобы выполнить ваше программирование цели.) Если вы действительно говорите, что вам нужно будет использовать код факторинга, который должен быть запущен в двух разных наборах обстоятельств, в два модуля, тогда вам будет полезно реорганизовать. Если вы говорите, что у вас есть код спагетти, который заканчивается полностью невозможным для рефакторинга, то это первая проблема, которую нужно решить, прежде чем пытаться прервать импорт модулей.

0
ответ дан patrick-mooney 27 August 2018 в 17:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: