Как я могу добавить префиксы таблиц в таблицы, созданные с использованием модели сначала в EF4? - PullRequest
3 голосов
/ 14 октября 2010

У моего клиента есть соглашение об именах таблиц БД, которое требует от меня префикса всех таблиц с префиксом, специфичным для приложения - например, "myapp_" - я использую EF4 с первым подходом модели.

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

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

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

Ответы [ 2 ]

1 голос
/ 02 декабря 2010

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

<EntitySet Name="Tests" EntityType="Test.Store.Tests" store:Type="Tables" Schema="dbo" *Table="Prefix_Tests"* />
0 голосов
/ 15 октября 2010

Я не уверен, есть ли шаблон для создания файлов 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 в отображениях и имя EntitySet в содержимом SSDL.

...