2011-02-08 6 views
0

Еще в 2003 году я начал создавать веб-приложения, которые использовали базы данных на PHP. Конечно, я начал просто помещать SQL-запросы непосредственно в свой код, не используя хранимые процедуры, подготовленные заявления или любые структуры ORM. Но в то время это была обычная практика, о чем свидетельствует код, над которым я работаю сегодня (веб-приложение VB.Net, построенное в это время).Рекомендации лучших приложений баз данных .Net

Приложение использует около десятка хранимых процедур, некоторые подготовленные операторы и множество SQL-запросов непосредственно в коде. Как правило, существуют избыточные блоки кода, которые получают соединение, запускают SQL-запрос (строку), а затем используют считыватель для извлечения данных с использованием имен жестко заданных полей. Сейчас 2011 год, написание такого кода было простым и популярным в 2003 году, но я предполагаю, что это не лучшая практика. Это не безопасно или легко поддерживать, и я не касался хранимых процедур.

Я хочу выйти за рамки запросов sql-кода hardcoding в приложениях и вручную анализировать данные из ответов. Каковы текущие передовые методы и инструменты для создания приложений баз данных в .NET? Я слышал о Linq2SQL, Entity Framework, NHibernate и некоторых других технологиях, но я не знаю, когда их следует использовать или они все еще актуальны.

Я использую Visual Studio 2010, VB/C# и SQL Server 2008 Express

Edit: Похоже, что большинство из вас обсуждают программного обеспечения ОРМ. Это звучит так, как я хочу; у нас есть несколько таблиц с большим количеством информации, к которой можно получить доступ как к объекту. Когда я должен вместо этого использовать стандартный запрос или подготовленный оператор?

+0

Если вы решите пойти с ORM (который звучит как подходящий для вас), вы можете найти помощь в выборе его здесь: http://stackoverflow.com/questions/1377236/nhibernate-entity-frameworkактивный -records-or-linq2sql/ –

ответ

0

Ваша догадка использовать технологии object relational mapping (ORM) является хорошей; есть, как вы уже упоминали, рамки (которые, как вы уже упоминали), поддерживают их, что позволяет динамически взаимодействовать с данными (скажем, без хранимых процедур, генерации запросов «на лету») и нединамическим способом (хранимые процедуры и т. д.) ,

Вы осветили текущий ландшафт технологий ОРМ, вот разбивка некоторых различий каждого из них.

NHibernate

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

LINQ to SQL

Пока официально не умер, это было публично заявлено, что акцент на развитие не будет в LINQ-to-SQL. Эти усилия будут направлены на LINQ-to-Entities. Хотя обычно лучше работать с LINQ для Entities (при выборе между этим и этим) возникают проблемы; генерация модели не так чиста, как хотелось бы некоторым пользователям, the metadata mapping model that they use doesn't allow you to use models from different designers easily и другим проблемам, которые NHibernate, вероятно, преодолел давно.

LINQ to Entities

В настоящее время предпочтительным методом доступа к данным в .NET (как evidienced на поддержку не только дизайнер и интеграции в VS.NET, но в рамках таких как RIA), это то, что MS собирается посвятить энергии при работе с пространством ORM. В настоящее время он находится на второй крупной итерации (первый из которых оказался трудным для использования несколькими людьми), простота в использовании определенно увеличилась.

Я также хотел бы изучить будущую интеграцию с другими технологиями MS.


Несмотря на это, все три технологии позволит выставить хранимые процедуры таким образом, что будет возвращать объектные модели вам вместо наборов данных, которые у вас есть синтаксический анализ/использование строкового подстановочные для.

Они также будут обрабатывать случай, когда вам нужно возвратить данные обратно в базу данных; они каждый раз об этом по-разному.

+0

Это руководство было полезным до сих пор в обучении использованию NHibernate: http://nhforge.org/blogs/nhibernate/archive/2010/04/25/first-three-nhibernate-quickstart-tutorials -available.aspx – Chris

3

Entity Framework и NHibernate - это то, что называется Object/Relational Mappers. Они генерируют слой, который соединяет промежуток между объектами и базами данных (иногда их называют Object Relational Impedance Mismatch).

Я не могу рекомендовать использование OR/M достаточно. Любой из них хорош; NHibernate имеет немного преимущество в безопасности, но, похоже, он имеет более крутую кривую обучения. Я лично использую Entity Framework, но это действительно вопрос предпочтения.

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

LINQ2SQL - это более основанная на базе данных технология, но она квалифицируется как OR/M. Я бы пропустил прямо к EF. EF был частью .Net 3.5 SP1, найдено here.

Вот пример некоторого кода, чтобы получить клиент из базы данных с помощью EF:

using (var ctx = new DBEntities()) 
{ 
    var employee = (from e in ctx.Employees 
      where e.User.UserName == userName 
      select e).FirstOrDefault(); 
} 

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

Ссылка на МС при запуске: http://msdn.microsoft.com/en-us/library/bb386876.aspx.

HTH.

1

Try LLBLGen: http://www.llblgen.com/defaultgeneric.aspx

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

Смежные вопросы