Я пытаюсь принять решение о лучшей стратегии доступа к базе данных. Я понимаю, что это общий вопрос, и нет ни одного хорошего ответа, но я предоставлю некоторые рекомендации по тому, что я ищу. За последние несколько лет мы использовали нашу собственную систему персистентности, хотя и ограниченный. Однако для этого нужны некоторые существенные улучшения, и мне интересно, должен ли я идти этим путем или использовать одну из существующих фреймворков. Критерии, которые я ищу, в порядке важности:Стойкость?
Код клиента должен работать с чистыми объектами, без знания базы данных. При использовании нашей пользовательской структуры код клиента выглядит так:
SessionManager session = new SessionManager(); Заказ заказа = session.CreateEntity(); order.Date = DateTime.Now; // Устанавливаем другие свойства OrderDetail detail = order.AddOrderDetail(); detail.Product = продукт; // Прочие свойства
// Зафиксировать все изменения сейчас session.Commit();
Должно быть как можно более простым, а не «слишком гибким». Нам нужен единственный способ сделать многое.
- Должен иметь хорошую поддержку объектно-ориентированного программирования. Должен обрабатывать отношения «один ко многим» и «многие ко многим», должен обрабатывать наследование, поддерживать ленивую загрузку.
- Конфигурация предпочтительнее на основе XML.
С моими текущими знаниями я вижу следующие варианты:
- улучшить нашу текущую базу - Проблема заключается в том, что она нуждается в много усилий.
- ADO.NET Entity Framework - не имеет хорошего понимания, но кажется слишком сложным и имеет плохие отзывы.
- LINQ to SQL - Не имеет хорошей обработки объектно-ориентированных практик.
- nHibernate - Кажется хорошим вариантом, но некоторые пользователи сообщают слишком много архаичных ошибок.
- SubSonic - из краткого введения кажется слишком гибким. Мне этого не надо.
Что вы посоветуете?
EDIT:
Спасибо Крейгу за сложный ответ. Я думаю, что это поможет больше, если я расскажу подробнее о нашей пользовательской структуре. Я ищу что-то подобное. Это как наш обычай рамки работы:
- Он основан на DataSets, поэтому первое, что вам сделать, это настроить DataSets и писать запросы, нужно там.
- Вы создаете файл конфигурации XML, который указывает, как таблицы DataSet сопоставляются с объектами, а также определяют ассоциации между ними (поддержка всех типов ассоциаций). 3. Пользовательский инструмент анализирует конфигурацию XML и генерирует необходимый код. 4.Сгенерированные классы наследуются от общего базового класса.
Для совместимости с нашей базой данных должны соответствовать этим критериям:
- Каждой таблица должна иметь один столбец в качестве первичного ключа.
- Все таблицы должны иметь первичный ключ того же типа данных, сгенерированный на клиенте .
- Для обработки наследования поддерживается только однонамерное наследование. Также XML-файл почти всегда предлагает единственный способ добиться чего-то.
То, что мы хотим поддержать сейчас:
- Удалить зависимость от DataSets. Код SQL должен генерироваться автоматически, но структура не должна генерировать схему. Я хочу вручную управлять схемой БД.
- Более надежная поддержка иерархии наследования.
- Дополнительная интеграция с LINQ.
Надеюсь, теперь яснее, что я ищу.