Как выбрать реляционное сопоставление объектов для .net

(Это должен быть FAQ, поэтому я ожидаю, что он будет закрыт как дубликат, однако я не могу найти вопрос, содержащий хороший обзор проблем и т.д..)

Что следует учитывать при выборе ORM для системы .net?

Как являются адресованными ORM, которые являются общими для систем .net.

(Вопрос Witch, с которым я должен ссылаться в ответах, когда я говорю "подумайте об использовании ORM" для вопроса .net)

Есть ли желание дать новый ответ и получить награду?

Ответ 1

Это основной вопрос/ответ, который я указывал людям в отношении выбора .NET ORM:

NHibernate, Entity Framework, активные записи или linq2sql

Я поставил кучу вопросов типа "дубликат" в своем ответе на этот вопрос. Таким образом, вы можете много читать, используя различные перспективы.

Я также попытаюсь ответить на ваши конкретные вопросы:

Что следует учитывать, когда выбор ORM для системы .net?

  • Вы хотите убедиться, что он работает с вашей базы данных. Если ваша база данных дизайн был 15 лет назад, многие из меньших и/или менее зрелых ORM не будут работать с вашим отсутствием ключи, странные отношения и т.д.

  • Вы хотите убедиться, что он работает с поставщика вашей базы данных. SQL Server поддержка почти всегда доступны, но другие базы данных могут или могут не поддерживаться различными ОРМ (MYSQL кажется вторым обычно поддерживаемая база данных).

  • Если вы хотите создать свою базу данных на основе ваших классов .NET вам нужно чтобы убедиться, что ваш ORM поддерживает это.

  • Если вам нужна производительность, я думаю, вы держаться подальше от плохой но они никогда не список 5 лучших, так что пока вы идете с ORM, который имеет некоторые основные направления street cred, вы, вероятно, хорошо здесь.

  • Вам нужно убедиться, что у него есть функции, которые вам нужны: http://ayende.com/Blog/archive/2006/05/12/25ReasonsNotToWriteYourOwnObjectRelationalMapper.aspx

  • Рассмотрите блокировку поставщика и как легко вы можете или не сможете избежать его (для обеих баз данных поставщика и поставщика ORM).

  • Подумайте, сколько вы хотите потратить.

  • Рассмотрим, что вы хотите для кода поколения.

  • Рассмотрим, что вы хотите для unit test поддержка.

  • Посмотрите, сколько времени вы хотите проводят исследования различных варианты.

  • Рассмотрим сообщество, которое существует вокруг ORM.

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

Как выше описано ORM которые широко используются для .net системы.

Единственный .NET ORM, который я знаю о том, что встречается практически во всем, нуждается в проекте .NET(за исключением более неясных поставщиков баз данных) - это NHibernate. Он был протестирован с множеством "устаревших" баз данных во множестве разных сценариев.

Ответ 2

битва ORM
Весь сайт, посвященный анализу и сопоставлению различных продуктов .NET ORM (Object Relational Mapping)!

Помните, что даже сайт ORMBattle сравнивает только 7 или 8 ORM (хотя те, которые он сравнивает, похоже, делают это достаточно тщательно, но см. отказ от ответственности ниже).

В соответствии с веб-сайтом SharpToolBox доступно около 40 ORM! Список продуктов ORM и их описания на веб-сайте SharpToolBox должны дать вам хорошее начало. Глянь сюда: Результаты поиска SharpToolBox для объектно-реляционного сопоставления

Учитывая, что почти каждый разработчик и каждый доступ к данным для доступа к данным приложений могут различаться, найти полное сравнение между всеми из них будет сложно. Вероятно, это связано с тем, что существует более 40 различных продуктов ORM, поскольку в мире ORM нет "одноразовых-всевозможных".

Кроме того, помните, что любые сравнения продуктов ORM могут быть "ошибочными", поскольку вы не всегда можете быть уверены, что различные функции различных продуктов ORM предназначены для тех же целей. Комментарий AJ по этому вопросу ссылается на сообщение в блоге от Айенде Рахиен, который описывает именно это явление, когда ORMBattle сравнивает NHibernate с другими ОРМ.

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

Ответ 3

Я не разработчик .net, но вы должны проверить nHibernate. Это версия .net для современного ORM для Java. Я уверен, что это отличное решение для .net, так как ist делает объекты сопоставления довольно легкими, но по-прежнему достаточно мощным, чтобы сопоставлять объекты практически с любой схемой sql.

Ответ 4

Выберите между NHibernate или Entity Framework. NHibernate более расширяемый и, как правило, более функциональный. Entity Framework работает лучше и проще в использовании с богатым набором функций.

Оба фреймворка великолепны, у Entity Framework есть одно большое преимущество над NHibernate: работать гораздо легче, фаза запуска может быть довольно сложной. EF делает это намного лучше. Однако в некоторых областях NHibernate превосходит, например. когда дело доходит до расширения рамки NHibernate предлагает больше возможностей

Наконец, сделайте свой звонок. Любой из двух вас никогда не разочарует.