Сгенерированные классы Entity Framework не входят в требуемое пространство имен, существует ли способ изменить пространство имен, которое он использует без восстановления?

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

Ниже приведен упрощенный фрагмент кода, где были созданы классы инфраструктуры сущности

namespace projectname
{
   #region Contexts

   /// <summary>
  /// No Metadata Documentation available.
  /// </summary>
  public partial class MyClass
  {

  }
}

Когда я добавляю класс в папку с моделями,

namespace projectname.Models
{

    public partial class MyClass
    {
     //etc, etc 
    }
}

Поскольку вы видите, что пространства имен не соответствуют вызывающим проблемам, когда я пытаюсь их использовать, поскольку компилятор видит как projectname.Models.MyClass, так и projectname.MyClass.

Я хотел бы получить некоторые советы по правильному исправлению этого вопроса, желательно обновить классы EF, чтобы они существовали в пространстве имен projectname.Models, но я не уверен, как это сделать.

Ответ 1

IIRC, если вы используете модель данных Entity, вы должны иметь возможность изменять пространство имен непосредственно через xml файл или файлы (возможно, вам придется изменить его для всех различных моделей хранения и концептуальных моделей). Возможно даже какой-то способ изменить его в дизайнере. Кажется достаточно простым.

На самом деле решение может быть здесь:

Сгенерированный обзор кода (конструктор модели данных сущностей) (см. Пользовательское пространство имен инструментов)

Ответ 2

В соответствии с комментарием Roman O, пространство имен может быть изменено путем обновления свойства "Пользовательское пространство имен инструментов" файла текстового преобразования (.tt), которое связывает сгенерированные классы сущностей (в подходе Database First) к файлу модели сущности (.edmx). Это работает в VS 2012 Express с EF 5.0.

Я бы опубликовал скриншот, но из-за отсутствия репутации.

Ответ 3

  • Щелкните правой кнопкой мыши файл.edmx в проекте в обозревателе решений и выберите "Свойства"
  • В области свойств VS, точное пользовательское пространство имен инструментов
  • Введите полное пространство имен CLR, которое вы хотите
  • Перестроить проект

Ответ 4

Пространство имен автоматически генерируемых классов будет наследоваться из настроек проекта VS (и даже изменится, если вы измените его там). Конечно, у вас должно быть свойство "Custom Namespace". (просто протестировал его с VS2013 и EF6.1) В отличие от файлов настроек, которые всегда были pita :)

Для более старой версии есть хорошее видео по ручной смене:

https://youtu.be/B7Cqc9F0Ih8