Общие сведения о формировании кода (конструктор моделей EDM)

Платформа ADO.NET Entity Framework предоставляет средства для автоматического формирования уровня объектов на основе содержимого на языке CSDLв EDMX-файле. По умолчанию конструктор моделей EDM ADO.NET (конструктор сущностей) использует EntityModelCodeGenerator в качестве настраиваемого средства при создании кода уровня объектов. Дополнительные сведения о настраиваемых средствах см. в разделе Реализация генераторов одного файла. Можно также воспользоваться программой командной строки EdmGen.exe. Дополнительные сведения см. в разделе How to: Use EdmGen.exe to Generate Object Model Files. Объект EntityModelCodeGenerator и программа командной строки EdmGen.exe используют класс EntityClassGenerator для создания исходного кода.

Конструктор сущностей может также использовать текстовые шаблоны для формирования настраиваемого кода уровня объекта. Дополнительные сведения см. в разделе Как настроить создание кода уровня объекта (конструктор моделей EDM).

Формирование кода уровня объектов

Настраиваемое средство, используемое по умолчанию для создания кода уровня объекта, можно запустить одним из следующих способов.

  • С помощью мастера моделей EDM ADO.NET. Дополнительные сведения см. в разделе мастер моделей EDM.

  • Использовать мастер обновления моделей. Дополнительные сведения см. в разделе Мастер обновления модели (средства работы с моделью EDM).

  • Запустить средство, указанное в свойстве Custom Tool EDMX-файла. Для этого щелкните EDMX-файл в Обозревателе решений правой кнопкой мыши и выберите Пользовательское средство. Дополнительные сведения о свойствах EDMX-файла см. в разделе Общие сведения об EDMX-файле (платформа Entity Framework).

  • Сохраните EDMX-файл.

  • Выйдите из измененного EDMX-файла. Обратите внимание, что это означает также выход из измененного EDMX-файла, открытого в конструкторе сущностей.

  • Постройте проект, содержащий измененный EDMX-файл.

    Cc982041.note(ru-ru,VS.100).gifПримечание
    Вышеописанные параметры создают или переписывают файл исходного кода Visual Basic или C# со следующим именем: <имя модели>.Designer.vb или <имя модели>.Designer.cs.Этот файл добавляется в EDMX-узел в Обозревателе решений.

  • С помощью программы командной строки EdmGen.exe. При использовании средства EdmGen.exe создается файл исходного кода Visual Basic или C# с именем и расположением, заданным в командной строке.

Cc982041.note(ru-ru,VS.100).gifПримечание
При создании кода уровня объекта с помощью настраиваемого средства, заданного по умолчанию, или программы EdmGen.exe, существующий код уровня объекта перезаписывается.Дополнительные сведения о том, как избежать перезаписи настроек уровня объекта, см. в разделе How to: Customize Generated Data Objects.

Cc982041.note(ru-ru,VS.100).gifПримечание
Метод, формируемый при импорте функции в концептуальную модель, будет выполнять соответствующую хранимую процедуру методом ExecuteFunction.Если используется перегрузка, которая не принимает параметр слияния, будет применен параметр AppendOnly.

Cc982041.note(ru-ru,VS.100).gifПримечание
Начиная с версии Visual Studio 2010, генераторы кода устанавливают свойство LazyLoadingEnabled на объекте ObjectContext в значение атрибута примечания annotation:LazyLoadingEnabled , определенного в концептуальной модели.По умолчанию значение annotation:LazyLoadingEnabled равно true.

Определение пространства имен формируемого кода

По умолчанию пространством имен формируемого кода является пространство имен, указанное на странице проекта Страница «Приложение». Если в свойстве Custom Tool Namespace EDMX-файла задано пространство имен, будет использоваться заданное пространство имен.

В зависимости от типа проекта, следует учитывать следующие дополнительные соображения.

  • Для проектов Visual Basic, если значение свойства Custom Tool Namespace не задано и проект имеет пустое пространство имен, формируемый код будет содержать пространство имен концептуальной модели согласно определениям EDMX-файла. Дополнительные сведения см. в разделе Определение пространства имен по умолчанию. Если указать пользовательское пространство имен, компилятор Visual Studio привяжет корневое пространство имен проекта к указанному имени. Несмотря на то что типы определяются в указанном пространстве имен, при декларировании типов следует импортировать defaultnamespace.specifiednamespace. Например, если корневым пространством имен проекта является ProjectDefaultNamespace, а в свойстве «Пространство имен CustomTool» указано TestNamespace, при объявлении типов, определенных в пространстве имен TestNamespace, следует использовать команду Import ProjectDefaultNamespace.TestNamespace.

  • Что касается проектов C#, если для свойства Custom Tool Namespace не заданы пространства имен, то пространством имен создаваемого кода будет пространство имен проекта по умолчанию (в соответствии с параметрами на Странице «Приложение» проекта) с добавлением пути к папке EDMX-файла. Например, если путем EDMX-файла относительно корневого каталога проекта является Folder1/Folder2/Model.edmx, то пространством имен сформированного кода будет ProjectDefaultNamespace.Folder1.Folder2.

  • Для проектов ASP.NET Website, если EDMX-файл находится в корневой папке App_Code, пространством имен сформированного кода будет пространство имен концептуальной модели, указанное в содержимом CSDL EDMX-файла (дополнительные сведения см. в разделе Schema Element (CSDL)). Если EDMX-файл находится в подпапке папки App_Code, то пространством имен сформированного кода будет путь папки относительно папки App_Code. Например, если EDMX-файл находится в папке App_Code/Folder1/Folder2, то пространство имен сформированного кода будет Folder1.Folder2.

Работа с несколькими EDMX-файлами в проекте

Если проект содержит несколько EDMX-файлов, построенных на основе баз данных с обобщенными табличными именами, то в сформированном коде могут содержаться конфликтующие имена классов. Обстоятельства, при которых возникают такого рода конфликты, и способы их разрешения зависят от типа проекта, а именно:

  • В проектах C# конфликтующие имена классов могут появляться в сформированном коде, если в одной папке проекта находятся несколько EDMX-файлов, построенных на основе баз данных с обобщенными табличными именами. Чтобы разрешить конфликт, необходимо задать уникальное значение для свойства Custom Tool Namespace каждого EDMX-файла или поместить каждый EDMX-файл в отдельную вложенную папку проекта.

  • В проектах Visual Basic конфликтующие имена классов могут появиться в сформированном коде в том случае, если в любой папке проекта находится несколько EDMX-файлов, построенных на основе баз данных с обобщенными табличными именами. Чтобы разрешить конфликт, необходимо указать уникальное значение для свойства Custom Tool Namespace каждого EDMX-файла.

  • В проектах ASP.NET Website конфликтующие имена классов могут появиться в сформированном коде в том случае, если в папке App_Code или в одной подпапке каталога App_Code находится несколько EDMX-файлов, построенных на основе баз данных с обобщенными табличными именами. Чтобы разрешить конфликт, необходимо поместить каждый EDMX-файл в отдельную вложенную папку каталога App_Code.

Обратите внимание, что разрешение конфликта в любом из вышеприведенных случаев изменит пространство имен кода, сформированного для каждого EDMX-файла. Возможно, придется обновить существующий код приложения, который использует сформированные классы.

Расширение разделяемых классов

При формировании классов данных средствами работы с моделью EDM они реализуются в виде разделяемых классов. Можно добавить функциональность объектам, расширяя сформированные разделяемые классы данных. Разделяемые классы можно расширять пользовательскими методами и свойствами в отдельном исходном файле, не беспокоясь о том, что пользовательские настройки будут потеряны при обновлении сформированных файлов. Дополнительные сведения см. в разделе How to: Customize Generated Data Objects.

В этом разделе

См. также

Основные понятия

Общие сведения об EDMX-файле (платформа Entity Framework)