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

StackOverflow https://stackoverflow.com/questions/11878

Вопрос

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

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

2) Линк2Скл

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top