Нужно сгенерировать файлы EDMX и скомпилировать их - PullRequest
4 голосов
/ 31 января 2010

Мой вопрос может быть немного другим или базовым для продвинутых пользователей.

У меня есть веб-приложение, которое настраивается администраторами. Это означает, что администратор может добавить новую схему таблицы или отредактировать столбцы таблицы, добавить новые столбцы таблицы и т. Д. Эти изменения отображаются на наши логические объекты (очень похожие на EDMX), которые публикуются после изменения. При публикации мы генерируем хранимые процедуры с необходимыми необходимыми изменениями.

Из пользовательского интерфейса мы используем эти логические объекты для подключения к БД (используя COM, который понимает отображение и выполняет соответствующие sprocs и представления и т. Д.). Теперь я думаю использовать EF для замены модели логических объектов, которая у нас есть в настоящее время. Я могу создавать файлы EDMX (файлы csdl, msl, ssdl, cs) динамически, но я не уверен, как их скомпилировать и динамически упаковать классы в DLL. Это означает, что когда я нажимаю кнопку, все файлы, относящиеся к edmx, будут созданы, и библиотеки DLL должны быть созданы на основе файлов CS, и веб-сайт должен иметь возможность доступа к новым изменениям в коде.

Можете ли вы помочь мне, как автоматически и динамически компилировать файлы CS. У меня не будет исходного кода других файлов (например, default.aspx и других) на стороне клиента.

Спасибо Albert

Ответы [ 2 ]

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

Bepenfriends - вместо попытки CSC из оболочки рассмотрите возможность использования CSharpCodeProvider.CompileAssemblyFromFile.

С одной вещью нужно быть осторожным: если вы компилируете код, а затем пытаетесь скомпилировать его снова, вы можете заблокировать созданную сборку. Для этого я создал AsyncCompiler, который создает новый домен приложения, компилирует его и выгружает домен приложения.

Это довольно сложный код, но я делаю это (генерирую XML-файлы AEF, генерирую из них код, а затем компилирую все в сборку), и он работает хорошо. Единственное, в чем я не совсем прав, - это динамический импорт хранимых процедур - они есть в моем SSDL, но не в CSDL или MSL. Поиск решения привел меня сюда.

Надеюсь, ключевых слов здесь достаточно, чтобы направить вас в правильном направлении.

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

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

1) Существует набор шаблонов CodeSmith под названием PLINQO , которые генерируют вашу модель Linq-to-SQL (DBMX) и связанные с ней файлы * .cs из вашей базы данных. Я сам спросил их о поддержке Entity Framework, и они подтвердили, что работают над этим - так что, возможно, у них это будет в ближайшее время.

Поскольку это шаблоны генерации кода и моделей, вы определенно можете взять их для Linq-to-SQL и настроить их для EDMX. Немного работы, но определенно возможно. Если у вас есть файлы * .cs и модель * .edmx, вы можете сгенерировать полученную сборку из нее с помощью компилятора командной строки CSC (C #), который устанавливается на каждом компьютере, на котором установлен .NET.

2) В .NET 4 новая Entity Framework 4 будет включать в себя шаблоны T4 (еще одна технология генерации кода), которые позволят вам настроить генерацию кода. Та же история применима и здесь - вы можете внешне сгенерировать модель EDMX и связанные файлы * .cs для классов и сгенерировать сборку на лету из этих шаблонов.

См. Еще одно сообщение в блоге на эту тему, и вы должны найти много информации, когда вы идете (или разглагольствуете) или "Шаблоны EF4 T4".

Надеюсь, это поможет хоть немного!

...