(EDIT: я сделал его вики-сообществом, поскольку он больше подходит для совместного формата.)
Существует множество способов доступа к SQL Server и другим базам данных из .NET. У всех есть свои плюсы и минусы, и это никогда не будет простым вопросом, который является "лучшим" - ответ всегда будет "это зависит".
Однако я ищу сравнение на высоком уровне различных подходов и фреймворков в контексте разных уровней систем. Например, я бы предположил, что для быстрого и грязного приложения Web 2.0 ответ будет сильно отличаться от внутреннего CRUD-приложения Enterprise.
Я знаю, что есть множество вопросов о переполнении стека, связанных с подмножествами этого вопроса, но я думаю, было бы полезно попытаться построить итоговое сравнение. Я постараюсь обновить вопрос с исправлениями и разъяснениями по мере продвижения.
Пока это мое понимание на высоком уровне, но я уверен, что это неправильно... В первую очередь я уделяю основное внимание подходам Microsoft, чтобы это сфокусировалось.
ADO.NET Entity Framework
- Агностик базы данных
- Хорошо, потому что он позволяет обменивать входы и выходы
- Плохо, потому что это может повлиять на производительность, и поставщики баз данных не слишком довольны этим.
- Кажется, это предпочтительный маршрут MS для будущего.
- Сложно учиться (см. 267357)
- Доступ к нему осуществляется через LINQ to Entities, поэтому он предоставляет ORM, что позволяет абстрагироваться в вашем коде
LINQ to SQL
- Неопределенное будущее (см. Действительно ли LINQ to SQL мертв?)
- Легко учиться (?)
- Работает только с MS SQL Server
- См. также Плюсы и минусы LINQ
"Стандарт" ADO.NET
- Нет ORM
- Нет абстракции, поэтому вы вернетесь к "рулонам" и играете с динамически созданным SQL
- Прямой доступ, позволяет потенциально повысить производительность
- Это связано с вековой дискуссией о том, следует ли сосредоточиться на объектах или реляционных данных, на которые, естественно, отвечает "это зависит от того, где основная часть работы", и поскольку это непрошенный вопрос, мы надеемся, что мы не нужно вдаваться в это слишком много. ИМХО, если ваше приложение в основном управляет большими объемами данных, не имеет смысла слишком сильно абстрагировать его на объекты в интерфейсном коде, вам лучше использовать хранимые процедуры и динамический SQL, чтобы выполнить такую большую работу, как возможно на задней панели. Принимая во внимание, что если вы в первую очередь взаимодействуете с пользователем, что вызывает взаимодействие с базами данных на уровне десятков или сотен строк, ORM имеет смысл. Итак, я полагаю, что мой аргумент в пользу хорошего старомодного ADO.NET был бы в том случае, когда вы манипулируете и изменяете большие массивы данных, и в этом случае вы получите прямой доступ к бэкэнд.
- Другим случаем, конечно, является то, где вы должны получить доступ к устаревшей базе данных, которая уже охраняется хранимыми процедурами.
Элементы управления источником данных ASP.NET
Являются ли они чем-то совершенно иным или просто слоем над стандартным ADO.NET? - Вы действительно использовали бы их, если бы у вас был DAL, или если вы реализовали LINQ или Entities?
NHibernate
- Кажется, это очень мощный и мощный ORM?
- Открытый исходный код
Некоторые другие релевантные ссылки; NHibernate или LINQ to SQL Entity Framework vs LINQ to SQL