3

У моего клиента есть соглашение об именах таблиц db, которое требует от меня префикса всех таблиц с префиксом конкретного приложения, например «myapp_». Я использую EF4 с первым подходом модели.Как добавить табличные префиксы в таблицы, созданные с использованием модели сначала в EF4?

Я могу указать пользовательское пространство имен db, но они не хотят вводить новое пространство имен для этого приложения - ни один из их других приложений не использует пространства имен, отличные от dbo.

Я пошел по пути настройки шаблонов t4, но я не мог указать, какие шаблоны t4 следует использовать при генерации трех файлов метаданных, которые EF нуждается во время выполнения.

Есть ли предпочтительный способ выполнения требования префикса таблицы с использованием EF?

ответ

0

Я не уверен, есть ли шаблон для генерации файлов edmx, который будет использовать , но он определенно использует его для генерации DDL. который находится на этом пути:
<Program Files>\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen
Внутри этой папки найдите файл с именем SSDLToSQL10.tt Вы должны вручную скопировать и вставить этот файл в той же папке, для того, чтобы VS2010 признать его, а затем вы можете изменять и настраивать его для префикса имен таблиц на основе вашего соглашения об именах БД. Внутри шаблона T4, обратите внимание на этот код:

foreach (EntitySet entitySet in Store.GetAllEntitySets()) 
      { 
       string schemaName = Id(entitySet.GetSchemaName()); 
       string tableName = Id(entitySet.GetTableName()); 
       ... 

Вы можете изменить имя таблицы, чтобы иметь свой собственный префикс. Внутри T4 есть 3 места с указанным выше кодом, и вам нужно применить префикс. После того, как вы закончите, сохраните и закройте файл и вернитесь к своему EDM внутри VS. Вы увидите, что теперь, когда вы опускаете свойство шаблона генерации DDL, новый файл T4, который вы скопировали и изменили, является доступной опцией. Выберите это, и теперь, когда вы создаете базу данных из модели, вы увидите, что ваши имена таблиц имеют префикс

Таким образом, можно изменить шаблон и настроить способ создания DDL. Существует сложная задача: рабочий процесс не использует модифицированный T4 для изменения файла edmx для определений хранения и сопоставлений (SSDL & MSL). Поэтому, хотя база данных была создана правильно, edmx все еще указывает на имена исходных таблиц.

Поэтому вам нужно будет открыть редактор edmx в редакторе XML и вручную изменить содержимое C-S (MSL) и SSDL, чтобы иметь свои префиксы. Для этого вам нужно только изменить StoreEntitySet в сопоставлениях и имя EntitySets в содержимом SSDL.

+0

спасибо за ответ - я ранее редактировал файл ssdltosql10.tt и создал правильный сценарий - но, как вы упоминаете отображение в SSDL и MSL должен быть отредактировано вручную , Я надеялся иметь автоматизированный способ генерации правильных ssdl и msl. – MIantosca

1

Вместо нескольких изменений в C-S Mapping и SSDL-содержимом вы также можете добавить атрибут Table в EntitySet содержимого SSDL. Это намного проще. Это становится чем-то вроде:

<EntitySet Name="Tests" EntityType="Test.Store.Tests" store:Type="Tables" Schema="dbo" *Table="Prefix_Tests"* />