3

TLDR - что является лучшим вариантом между EF и NHibernate, если все, что вы знаете, это то, что ему нужно работать с oracle db, изменение динамической схемы во время выполнения, в некоторых таблицах нет первичных ключей, обучения кривая наклоняется слишком долго.NHibernate vs. Entity Framework

Мы написали приложение MVC 4, которое использует EF для извлечения данных из базы данных. Мы знали, что в этот проект входит то, что некоторые из наших таблиц не имеют первичных ключей (и некоторые из них не получат их когда-либо), поэтому у нас также есть проект настойчивости для запуска регулярных запросов к таблицам без первичных ключей. Это было наше решение по первому ключевому вопросу, но я читал, что NHibernate более прощает и имеет некоторые работы для запросов таблиц без первичных ключей. Это так?

Был задан вопрос о том, сможет ли мы изменить схему во время выполнения на основе того, что входит в систему. Каждый клиент будет иметь одинаковые наборы таблиц, но у них есть отдельная схема. Это для целей безопасности. Таблицы никогда не будут отличаться, поэтому у нас будет одна «основная» схема, которую мы используем для создания нашего poco и построения в dev. Однако, когда приложение развертывается, клиенты регистрируются, и они должны иметь возможность получать заказы из таблиц в рамках их соответствующей схемы. Это было бы сделано путем изменения схемы, которая используется в контексте ... если у кого-то нет лучшего предложения для этого? По сути, мы хотим изменить те таблицы, к которым пользователь подключается, на основе того, к какому клиенту они принадлежат, но все же могут просматривать все объекты в дизайнере модели и генерировать poco при работе внутри решения.

Мы используем оракул как наш поставщик баз данных и работаем с EF до сих пор, но EF требует сторонних инструментов для работы, тогда как NHibernate хорошо работает с оракулом из коробки. Поскольку у нас есть Oracle oracle, мы должны смотреть на другие инструменты ORM над EF или EF по-прежнему сильным инструментом?

Как я уже сказал, у нас уже есть запутанное приложение, работающее с EF. Это было относительно прямолинейно и легко понять. После того, как мы закончим проектирование архитектуры и задней кости, остальная часть команды будет очень легко погружаться и работать с EF на основе моего опыта. Это может быть связано с тем, что доступно множество доступных справочных материалов и даже учебные проекты, которые показывают EF в действии с MVC. Мне уже было трудно найти хорошую документацию и поддержку для NHibernate. Кто-нибудь испытал разочарование из-за отсутствия документации и с тех пор решил забыть все о NHibernate как инструменте ORM, и будет ли трудно другим разработчикам быстро изучить его?

ps. Смелый вопрос, приведенный выше, был самым неприятным, что я не могу решить до сих пор и является причиной того, что я смотрю на NHibernate как альтернативное решение. Если вы можете предложить решение, позволяющее мне динамически изменять схему во время выполнения, я могу забыть все о NHibernate. Поэтому, если ничего больше, я действительно ищу полужирный раздел, чтобы получить ответ.

Заранее спасибо за помощь

+0

Не совсем уверен, как любой ORM будет эффективен в базе данных, где схема изменяется во время выполнения и не имеет первичных ключей tbh. – James

+0

@saluce - (по вашей ссылке) «Ищите объяснения, а не предложения: будьте конкретны в том, что вам нужно для достижения, изучения или покупки, но спросите, как это сделать, узнать или выбрать». вам конкретные критерии или инструменты, которые я использую прямо сейчас, и спросили, что будет идеально, и основная часть моего вопроса запрашивала методы для выполнения моих текущих проблем, которые в конечном итоге привели меня в NHibernate для начала. Я не просил продавца продать меня на двух продуктах без ссылки на ситуации, которые привели меня к началу поиска в первую очередь. – danmanallen

+0

@James - отображения xml не будут меняться, потому что все схемы будут иметь одинаковые расположение и структура таблицы. Все от ограничений FK до триггеров таблицы будет одинаковым. Единственное различие - это данные в таблицах (это будет конкретный клиент) и [Схема]. который идет перед именем таблицы. Я не уверен, что это лучший способ организации данных, но это то, что заявили аналитики db, которые они планируют сделать, и я должен сначала исключить возможность изменения схемы во время выполнения. Хорошим примером того, что у нас есть, является ситуация с несколькими арендаторами. – danmanallen

ответ

2

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

Я не могу много комментировать EF, но с NHibernate вам повезло: одна из функций OpenSession() в классе SessionFactory принимает объект IDBConnection.

Так он может работать так:

  • На старте приложения, необходимо создать сессионный фабрику.Это анализирует и кэширует все метаданные сопоставления на уровне приложения
  • Вся работа базы данных NHibernate происходит через объект Session. Как только ваш пользователь войдет в систему, для каждого цикла запроса/ответа (или action-> view) вы получите новый сеанс из SessionFactory. У большинства пользователей настроена фабрика сеансов с одной строкой и драйвером, но в вашем случае вы должны создать соединение с пользовательской строкой соединения и передать ее SessionFactory.OpenSession. Прежде чем вы начнете намного дальше, стоит зачитать концепцию «сеанса как функции работы» NHibernate, а также изучить управление сеансами.

Также, NHibernate может быть очень гибким при работе с существующими базами данных. Я не думаю, что он может работать без какой-либо формы ключа (если вы обновляете запись базы данных, NHibernate должен надежно получить доступ именно к этой записи из БД), но он может использовать составные ключи.

+0

Несколько вопросов об этой функции. Создается ли сеанс при входе пользователя в систему? Является ли это, как событие генерации xml EF, наиболее трудоемким и поэтому работает только один раз, когда приложение загружается? Изменяется ли/может ли этот сеанс с каждым вызовом в базу данных? Будет ли в итоге слишком много времени, чтобы быть эффективным? Спасибо – danmanallen

+0

Создана ли сессия, когда пользователь входит в систему? Нет, это совершенно отдельная вещь. Многие люди используют шаблон сеанса за запрос, который создает сеанс по запросу, запускается и сбрасывается/закрывается на конец запроса. – brendanrichards

+0

Является ли это событием генерации xml EF, которое является наиболее трудоемким и поэтому работает только один раз, когда приложение загружается? Это будет фабрика сеансов. – brendanrichards

Смежные вопросы