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

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

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

2) Linq2Sql

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

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

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

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

15.08.2008 01:50:02
12 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

6
15.08.2008 03:37:32
Мне было немного сложно реорганизовать код, если вы используете метод «перетаскивания» в конструкторе linq2sql. Однако, с помощью Fluent NHibernate это может быть довольно легко решить.
hangy 31.10.2008 13:50:06
Свободный NHibernate облегчает написание интеграционных тестов, которые должны проверять правильность ваших отображений. Вы можете использовать базу данных в памяти, чтобы сделать это быстро.
Marek Blotny 17.12.2008 19:10:22
использование linq2sql проклянет ваших детей. вся ваша семья умрет ужасной смертью, созданной дизайнером.
Andrew Bullock 8.05.2010 22:03:42

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

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

1
15.08.2008 02:00:55

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

0
15.08.2008 02:05:46

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

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

5
15.08.2008 03:57:06

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

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

1
19.08.2008 20:58:17

Вы определенно хотите использовать ORM. Любой ORM в порядке, но вы хотите что-то, что будет генерировать строго типизированные классы. Когда поля добавляются, изменяются или удаляются из таблицы, вы хотите иметь возможность перегенерировать эти классы и иметь дело только с исправлением ошибок времени компиляции. Если вы используете динамическую модель, у вас может быть много неприятных ошибок во время выполнения. Это очень важно! Я являюсь частью команды разработчиков MyGeneration по sourceforge, и я думаю, что это отличное решение вашей проблемы. Вы можете создавать dOOdads, NHibernate, EasyObjects, EntitySpaces и т. Д. Если вы хотите использовать более дорогое решение, используйте CodeSmith или LLBLGen Pro . Удачи - всем, кто заинтересован в использовании MyGeneration, не стесняйтесь обращаться ко мне с вопросами.

2
16.09.2008 19:15:42

Если схема базы данных часто меняется, предпочтите Entity Framework вместо LINQ2SQL. Если схема меняется, используя L2S, вы должны:
1) удалить и повторно добавить вашу таблицу (потеряв ваши настройки)
2) вручную изменить модель (как это сделано здесь в stackoverflow)

EF - это супер-набор L2S, обеспечивающий большую гибкость использования и независимость от dbms

0
16.09.2008 18:54:35

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

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

0
17.12.2008 19:06:27

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

0
17.12.2008 19:13:22

EntitySpaces может восстановить ваш DAL / Business Layer за одну минуту, без потери кода, ознакомьтесь с пробной версией ==> ЗДЕСЬ

Регистрация не требуется, работает и под Visual Studio.

1
23.01.2009 14:30:23
Я могу порекомендовать ES, с которым приятно работать
Ropstah 8.05.2010 21:13:21

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

1
8.05.2010 21:09:21

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

Вот как новый диалог проект будет выглядеть этот

1
8.05.2010 22:00:21