Как я могу использовать EntityModelSchemaGenerator для генерации меньше, чем вся моя модель? - PullRequest
1 голос
/ 07 октября 2009

У нас большая (и растущая!) База данных. Мы пытаемся не создавать модели вручную, и мы нашли это EdmGen2 , который должен построить наши модели сущностей EDMX для нас.

Поскольку у нас такая большая база данных, мы бы хотели, чтобы не все наши таблицы были в одной модели. Мы заставили все это работать, но в сгенерированной модели есть все наши таблицы.

Существует список таблиц только для чтения внутри EntityStoreSchemaGenerator. Это (на самом деле) все наши таблицы.

Будет ли этот инструмент создавать модель, которая меньше нашей полной базы данных? Можем ли мы выбрать, какие таблицы мы хотим поместить и использовать только те?

Ответы [ 4 ]

3 голосов
/ 08 октября 2009

Код EdmGen2 поставляется с опцией / RetrofitModel. Ключевым моментом этого режима является то, что он запускает некоторые алгоритмы интеллектуального анализа данных, чтобы увидеть, есть ли какие-либо очевидные наследственные отношения в экземпляре базы данных, и если это так, генерирует EDMX, который включает эти наследования.

Однако другая особенность параметра / RetrofitModel заключается в том, что он позволяет выбирать таблицы. Например, если у вас есть образец базы данных AdventureWorks, вы можете выполнить этот оператор:

EdmGen2 /RetrofitModel "Server=(local);Integrated Security=true;Initial Catalog=AdventureWorks;" "System.Data.SqlClient" "AVWorks"

Откроется список таблиц в базе данных, после чего вы сможете проверить, какие из них вы хотите иметь в своей модели.

1 голос
/ 13 октября 2009

Параметр tupleFraction помогает определить, что значит быть «значимым» подклассом. Правила интеллектуального анализа данных являются эвристическими, и поэтому они могут потенциально находить шаблоны, в которых здравый смысл может не совпадать.

Параметр tupleFraction говорит об этом (для некоторых правил): если EdmGen ++ считает, что он нашел подкласс, но у нового подкласса меньше, чем у tupleFraction экземпляров из его родительского класса, считают новый подкласс «незначительным» и не создавай это. Параметр является необязательным - если вы не укажете его, я думаю, он будет установлен на 0,05 (5%).

Текущая версия допускает указание таблицы только через пользовательский интерфейс. Однако извлечь список таблиц из файла или из какого-либо другого источника очень просто. Я добавлю его в начало списка дел для следующей версии.

ОБНОВЛЕНИЕ : Мы обновили код по адресу code.msdn.microsoft.com/edmgen2, чтобы можно было указывать таблицы без графического интерфейса. В предыдущей версии параметр RetrofitModel вызывал диалоговое окно, которое позволяло бы пользователю выбирать таблицы для включения в модель. DLL-библиотека ConceptualEdmGen теперь имеет два дополнительных общедоступных метода, которые могут задавать список таблиц, не вызывая диалоговое окно: один, который извлекает список таблиц из файла, а другой - когда список таблиц передается непосредственно методу в виде списка. строки.

Код EdmGen2 в том виде, в каком он появляется в пакете, использует опцию «from file», где он ищет файл с именем «Tables.txt» в текущем каталоге и, если он найден, передает свое содержимое в dll, чтобы установить список таблиц. Например, если содержимое файла «Tables.txt» было следующим:

HumanResources.Department
HumanResources.Employee
HumanResources.EmployeeAddress
HumanResources.EmployeeDepartmentHistory
HumanResources.JobCandidate
HumanResources.Shift

EdmGen2 создаст (для опции RetrofitModel) модель для всех таблиц в схеме HumanResources для AdventureWorks. Для обоих методов пустой список приведет к добавлению в модель всех таблиц в базе данных. Пользовательский интерфейс выбора таблицы по-прежнему будет отображаться, если не вызван ни один метод выбора таблицы.

0 голосов
/ 24 февраля 2010

Моим решением было создать вариант EdmGen2, который читает файл Filters.txt, который содержит не только имена таблиц, но и текст, который анализируется в параметрах EntityStoreSchemaFilterEntry (Категория, Схема, Имя, ObjectType, FilterEffect). Это позволяет мне генерировать модели и сборки, которые работают как с конкретными представлениями, так и с таблицами - что я не думаю, что делает EdmGen2.

Конечно, это не работает с ConceptualEdmGen, но так как нет доступного источника, я решил не использовать этот компонент в любом случае.

Одна проблема, которую я не решил, - как правильно добавить определения функций для хранимых процедур в CSDL и MSL. У меня это есть в SSDL, но я пока не знаю, как это сделать.

0 голосов
/ 07 октября 2009

Я только что отправил электронное письмо парню, ответственному за EdmGen2, посмотрим, что он вернет с

Алекс Джеймс

Менеджер программ, Entity Framework Team, Microsoft.

...