Лучшее решение .NET для часто изменяемых баз данных

В настоящее время я разрабатываю архитектуру небольшого CRUD-приложения. Их база данных представляет собой огромный беспорядок и будет часто меняться в течение следующих 6 месяцев или года. Что бы вы порекомендовали для слоя данных:

  1. ORM (если да, то какой?)

  2. Linq2Sql

  3. Хранимые процедуры

  4. Параметризированные запросы

Мне действительно нужно решение, которое будет достаточно динамичным (одновременно быстрым и простым), чтобы я мог часто заменять таблицы и добавлять/удалять столбцы.

Примечание: у меня нет большого опыта работы с ORM (только немного SubSonic), и я обычно использую хранимые процедуры, так что, возможно, это будет подходящим вариантом. Я бы с удовольствием изучил Ling2Sql или NHibernate, если бы они позволили реализовать ситуацию, которую я описал выше.

Решение

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

Это также будет проблемой с хранимыми процедурами.

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

Комментарии (3)

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

Он работал хорошо, пока на схемы базу было очень сложным, и мы уперлись в пределы картины и ActiveRecord, но до тех пор, как схема's не чрезвычайно сложной, он работает довольно хорошо. Как только схема стабилизируется, вы можете переключиться так, что вы'повторно только строить даль, когда вы хотите.

Комментарии (0)

Вы наверняка хотите использовать ORM. Каких-либо ОРМ в порядке, но вы хотите что-то, что будет создавать строго типизированные классы. Когда поля будут добавлены, изменены или удалены из таблицы, вы хотите быть в состоянии восстановить эти классы, и дело с фиксацией только ошибки времени компиляции. Если вы используете динамическую модель, вы'повторно, вероятно, имеют много неприятных ошибок во время выполнения. Это очень важно! Я вхожу в <а href="и http://www.mygenerationsoftware.com/">MyGeneration</а> команда разработчиков на SourceForge, и я думаю, что это отличное решение вашей проблемы. Вы можете создать декорации, NHibernate на, EasyObjects, EntitySpaces и т. д. Если вы хотите, чтобы пойти с более дорогостоящее решение, пойти на <а href="и http://www.codesmithtools.com/">CodeSmith</а> или <а href="и http://www.llblgen.com/defaultgeneric.aspx">LLBLGen Pro и ЛТ;/а>. Удачи - всем, кто интересуется использованием MyGeneration, не стесняйтесь обращаться ко мне с вопросами.

Комментарии (0)

NHibernate, но только если вы готовы использовать объектно-ориентированный подход, при котором вы определяете свои классы, затем определяете желаемую структуру таблиц в файлах отображения, а затем создаете схему базы данных, используя встроенные в NHibernate'классы генерации схем.

Если делать все наоборот (например, у вас есть куча таблиц, а затем вы основываете свой объектный дизайн на этом), я нашел MyGeneration + NHibernate работающим, хотя я не слишком доволен полученными классами (в основном потому, что я такой приверженец истинного объектно-ориентированного программирования).

Комментарии (0)

Если бы я был в вашей обуви я хотел бы попробовать использовать то, что я знал (хранимые процедуры) с Linq2Sql. Linq2Sql все еще можете использовать хранимые процедуры, но тогда у вас есть дополнительный бонус, поставив новый инструмент в свой пояс. Я думаю, имея представление о Linq2XXX (X является случайной технологии не для взрослых....это'т плохая идея сейчас, что я думаю об этом) синтаксис и методика будет отличным дополнением к вашей компетенции, используя LINQ по коллекции объектов как сладкий.

Но в конечном счете что-то вроде NHibernate на вам подойдет лучше в долгосрочной перспективе.

Комментарии (0)

EntitySpaces можете восстановить свой дал/бизнес-слой в одну минуту, и отсутствие потери кода см. В разделе демо-версию ==> здесь

Нет необходимости регистрации, работает в Visual студии.

Комментарии (1)

Использовать EntitySpaces. вы пришлите мне цветы, гарантированно. просто удивительным. изменить БД, как вам нравится. нажмите на кнопку, хлоп. все изменения сделаны. без изменения вашего кода. Я люблю его.

Комментарии (0)

Как простое приложение? Если я буду работать со схемой/дизайн вещи на пару месяцев, и не особо переживать по поводу фактическое приложение . . . Я бы рассмотреть возможность использования EDM и динамической сущности данных веб-приложения проекта. Это вам Ваш будет с наименьшим количеством усилий, на мой взгляд. Это держит вас сосредоточены на схемы, данные и другие groovey вещи. Я надеюсь, Дон'т получить слишком много ударов нег от этого!

Здесь's, как новое диалоговое окно проекта будет выглядеть как это

Комментарии (0)

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

Комментарии (0)

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

Комментарии (0)

При изменении схемы базы данных часто предпочитают рамках предприятия за LINQ2SQL. Если изменения схемы, с помощью L2S вы должны

  1. удалить и заново добавить вас в таблицу (с потерей всех настроек)
  2. модифицировать модель вручную (как сделано здесь на сайте StackOverflow)

Эф-это супер-набор L2S, давая вам большую гибкость использования и СУБД-независимость

Комментарии (0)

смотреть на то, почему он меняется, и посмотреть, если вы можете прогнозировать и обобщать типы изменений, которые надвигаются на вас так, что они Дон'т сломать ваш код

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

Комментарии (0)