Особенности производительности EF & .EDMX - PullRequest
3 голосов
/ 15 августа 2011

Я занимаюсь исследованием Entity Framework и связанных с ним файлов .edmx.

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

Мы используем исключительно хранимые процедуры, и наш текущий подход заключается в использовании метода ExecuteFunction в контексте объекта.Однако для этого требуется знание того, какие импортированные функции из файла edmx возвращают какой тип (context.ExecutionFunction<T>() возвращает ObjectResult<T>).

Мое теоретическое решение состоит в том, чтобы хранить любые файлы .edmx, которые мы хотим использовать, относительнопуть, и библиотека загружает их все во время выполнения.

Кто-нибудь пробовал это раньше?Это работает?Есть ли какие-либо соображения по поводу производительности, которые следует учитывать?Это будет использоваться в среде электронной коммерции, поэтому важны эффективность и скорость.

РЕДАКТИРОВАТЬ ДЛЯ НЕСКОЛЬКО ЯРКОСТИ:

Конечно, можно было бы скомпилировать каждого человека.Файл EDMX в свою собственную сборку, что может позволить использовать this .Любые входные данные тоже будут хороши.

Вызов, который мы сейчас делаем, выглядит примерно так:

Database.MakeCall<T>("stored_procedure_name", parametersCollection, KnownDatabases.Database);

В своем конструкторе обработчик базы данных будет хранить экземпляры каждой базы данных.контексты, о которых он знает (каждый из файлов .edmx в библиотеке).Используя перечисление KnownDatabases, он выбирает, с какой базой данных будет выполняться запрос.

В идеале я хотел бы выполнить такой вызов:

Database.MakeCall<T>("context_name", "stored_procedure_name", parametersCollection);

Где в обработчике базы данныхв своем конструкторе будет искать в папке файлы .edmx и загружать их все, а затем сохранять экземпляры каждого контекста в соответствии с именем контекста.То, как T будет определено или получено, сейчас немного размыто.

В обоих случаях тип возвращаемого значения будет ObjectResult<T>

1 Ответ

0 голосов
/ 15 августа 2011

То, что вы могли бы рассмотреть, это отображение DB в стиле ruby, в котором схема DB определяется во время выполнения, поэтому вам не нужно поддерживать код библиотеки отображения DB-ORM.

Для .netУ Subsonic есть такая ORM, как у Castle и nHydrate.Я знаю, что такая система может работать хорошо, так как реализация C ++ (ODB) имела хорошую статистику производительности (даже если она генерирует код из схемы, но делает это автоматически)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...