Пакет для цикла, кажется, работает параллельно [дубликат]

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

Предположим, у вас есть веб-форма 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 ()

23
задан That Umbrella Guy 11 April 2011 в 00:40
поделиться

2 ответа

Ваша проблема в том, что переменная get заменяется, когда пакетный процессор считывает команду for перед ее исполнением.

Попробуйте следующее:

SET temp=Hello, world!
CALL yourbatchfile.bat

И вы увидите Hello напечатано 5 раз.

Решение задерживается расширением; вам нужно сначала включить его, а затем использовать !temp! вместо %temp%:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /R %%X IN (*.txt) DO (
  set temp=%%~nX
  echo directory !temp:~0,7!
)

Подробнее см. здесь .

47
ответ дан configurator 26 August 2018 в 18:58
поделиться

Я не уверен, что это официально задокументировано, но вы можете имитировать замедленное расширение с помощью инструкции call:

@echo off
FOR /R %%X IN (*.txt) DO (
  set temp=%%~nX
  call echo directory %%temp:~0,7%%
)

Удвоение знака процента отменяет замену переменных на вторую оценку. Однако отсроченное расширение намного проще.

14
ответ дан bk1e 26 August 2018 в 18:58
поделиться
Другие вопросы по тегам:

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