Есть разные ответы с разной степенью сложности в зависимости от ваших потребностей.За исключением самых маленьких проектов, я создаю два проекта библиотеки классов для доступа к базе данных: один, содержащий модель данных и запросы, и другой тестовый проект, который выполняет запросы первого проекта.В простых решениях вы используете эту библиотеку в ASP.NET или другом проекте.
Вам настоятельно рекомендуется изучить ORM, например NHibernate или VS 2008 / .NET 3.5Linq-To-SQL или Entity Framework .Как минимум, вы ДОЛЖНЫ не забыть использовать параметризованные запросы , если у вас есть веб-приложение.
В более сложных решениях вы полностью инкапсулируете базу данных в ее собственную службу или уровень.По моему опыту, у меня был уровень доступа к данным, который работал в его собственной службе Windows Communication Foundation, в качестве службы Windows, и это была единственная служба, которая могла напрямую взаимодействовать с базой данных или знала модель данных базы данных.Он будет выполнять все взаимодействие с базой данных, а затем преобразовывать данные в различные модели данных, которые считываются другими уровнями.Я обычно создаю проект под названием «Контракты», который содержит все интерфейсы и модели данных, которые передаются от уровня данных к остальной части системы.Причина, по которой вы делаете это, заключается в том, что вы избегаете упомянутой вами боли: вы можете обновить базовую базу данных, слой ORM и «общие модели данных», а затем вообще не изменять другие уровни.