Требуется помощь .NET ORM - PullRequest
3 голосов
/ 05 января 2011

У меня есть база данных SQL-сервера с простыми (не так много ограничений) таблицами. Теперь мне нужно сгенерировать DAL и объектные классы для таблиц.

Насколько .NET ORM (например, NHibernate или любой другой бесплатный FW, который вы предлагаете) может помочь в этом? В основном помогает с трудоемкими задачами написания функций доступа к классам и БД. Я лучше потрачу время на написание бизнес-логики для этих классов объектов.

Легко ли будет добавить / изменить таблицы позже? У меня есть концептуальное представление об ORM, но нет практического опыта их использования.

Ответы [ 6 ]

3 голосов
/ 05 января 2011

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

Вы можете перетаскивать таблицы базы данных в DBML (L2S) или EDMX (EF) из Visual Studio, и он будет создавать ваши классы с элементами, сопоставленными один к одному со столбцами, а также с любыми имеющимися у вас связями. определены.

Чтобы создать Linq to Sql Classes или ADO.NET Entity Data Model, выполните следующие действия:

  • щелкните правой кнопкой мыши в Visual Studio один из ваших проектов
  • Добавить => Новый предмет
  • Выберите Linq to Sql Classes или ADO.NET Entity Data Model
  • Это создаст пустое представление дизайна для создания и настройки ваших классов.
  • Пользователь Server Explorer, чтобы открыть соединение с вашей базой данных
  • Перетащите таблицы на холст DBML или EDMX и сохраните, когда закончите.

Например:

  • стол User становится классом User
  • Если таблица User имеет столбец FirstName, она становится свойством FirstName
  • Если таблица User связана с таблицей Contact, она сгенерирует IList<Contact> Contacts в вашем User классе. Это позволит вам написать код типа user.Contacts.Where(c => c.ContactId == 7000) из сгенерированного DataContext

Если вам нужен более персонализированный способ отображения ваших таблиц, вы можете использовать SQLMetal , который также будет генерировать ваши классы, но позволит вам вносить изменения. Например, преобразование int свойств в enums.


NHibernate также является хорошим вариантом и прошел долгий путь.

1 голос
/ 05 января 2011

Обе Linq2Sql и Entity Framework могут помочь вам в этом в значительной степени. Что касается вашего вопроса об обновлении таблиц: Да, довольно просто обновить таблицы позже. По крайней мере, намного проще, чем если бы вы написали все от руки (где вам также придется вносить изменения вручную).

1 голос
/ 05 января 2011

Есть много инструментов, которые будут генерировать DAL для вас.

SubSonic - это не ORM, а инструмент генерации кода, который сгенерирует DAL для вас.

Существует Entity Framework и Linq to SQL (от Microsoft), который также сгенерирует DAL для вас, с поверхностью разработки в visual studio.

Со всеми этими таблицами добавления и изменения требуется восстановление DAL, поэтому изменения инастройки этих файлов могут быть потеряны.

0 голосов
/ 01 мая 2018

Попробуйте Vega https://github.com/aadreja/vega. Один из лучших и быстрых .net ORM с корпоративными функциями.

0 голосов
/ 22 мая 2015

Я немного опоздал на вечеринку, но Cocoon ORM на Nuget и Github хорош.Он записывает код доступа к данным динамически.http://guidelinetech.github.io/cocoon-orm/

Список функций ниже с веб-сайта:

  • Автоматическое сопоставление полей базы данных со свойствами объекта домена
  • AutoCrud с автоматическим созданием объединения при получении (выбрать)
  • Автоматическое сопоставление свойств объекта домена с параметрами хранимой процедуры
  • Динамически создает простой для проверки параметризованный SQL, который удобен для плана выполнения и кеша
  • Использует простые аннотации данных, аналогичные анонимной в Entity Framework
  • Инструменты регрессии и бенчмаркинга для действительно параноиков (как и мы)
  • Инструменты генерации таблиц для использования в среде с первым кодом
  • Инструменты генерации классов для использования во второй среде кода
  • Простое создание нецелочисленных последовательных уникальных идентификаторов с помощью включенного генератора GUID или последовательного UID.
  • Совместимость с SQL Server 2008/2012/20014 / + и Azure SQL (работает с другими базами данных TSQL)
  • Используйте библиотеки Cocoon ORM в своем проприетарном коде под слабым копированиемft лицензия LGPL (изменения в самой Cocoon ORM должны быть общими.Пожалуйста, дайте нам знать, чтобы мы могли мыслить вместе!)
0 голосов
/ 05 января 2011

Nhibernate будет обрабатывать всю вашу логику доступа к данным.Я рекомендую вам определить каждый внешний ключ и первичный ключ, которые вы можете.Также проще иметь явный первичный ключ вместо составного первичного ключа.

Для генерации классов объектов я рекомендую использовать шаблоны T4.Существуют различные образцы шаблонов, доступные в Интернете, и довольно просто написать свой собственный, чтобы делать именно то, что вы хотите.

Также неплохо бы, чтобы эти классы объектов служили контейнерами данных и реализовывали вашу бизнес-логикув отдельных классах, которые используют эти классы DAL.Это упростит возможность их регенерации в случае изменения базовых таблиц.

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