2012-05-26 3 views
0

Я пытаюсь понять, как работает модель доступа к базе данных в asp.net mvc, некоторые примеры имеют работу в контроллере, а в других - примеры в модели.доступ к базе данных и asp.net mvc

Я хочу знать, как это сделать, используя ado.net, лучшие практики - это использование класса на уровне модели и попытка доступа к моей базе данных?

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

Доступ к базе данных в модели или контроллере?

+0

FWIW, я обычно помещал доступ к данным в _data_, в отличие от моделей _view_. Каждый класс знает, что ему нужно сделать, чтобы упорствовать и делать другие полезные вещи, например. Get, Save (который обычно обрабатывает как добавление, так и обновление), Delete, GetAll, Search, ..., ToString, Parse, .... Некоторые классы поддерживают как мелкие, так и глубокие операции, чтобы лучше соответствовать потребностям приложений, например. получить заказ с базовой информацией или с полной контактной информацией, информацией о выставлении счетов, позициями, статусом доставки, расчетным временем выполнения, .... – HABO

+0

Я не понимаю, что вы имеете в виду с «помещением доступа к данным в данные». Я пытаюсь понять, является ли хорошая практика получением доступа dal от модели или контроллера. – NewCastle79

+0

Контроллер отвечает за навигацию и связанные с этим проблемы, но, как правило, не несет ответственности за прямой доступ к данным. В качестве примера класса модели данных мне приходится обрабатывать предварительно одобренные платежные соглашения PayPal. Класс содержит члены (UserId, EndingDate, NumberOfPayments, ...) и конструкторы. Он также содержит методы, которые вызывают хранимые процедуры SQL Server для управления постоянными экземплярами (Add, Get, Cancel, Charge, Delete, ...).Контроллер использует этот класс для поддержки моделей представления, которые, в свою очередь, поддерживают представления. Модель данных разделяется между проектами. – HABO

ответ

3

Вот архитектурный дизайн, чтобы рассмотреть:

  1. Взгляды и контроллеры находятся на веб-сайте MVC.
  2. Модели находятся в отдельном проекте.
  3. доступ к данным код находится в третьем проекте под названием DataAccess или Репозиторий.

Веб-сайт имеет ссылки на проекты Models и DataAccess. Проект DataAccess также имеет ссылку на проект «Модели».

Таким образом, код доступа к данным является отдельным. Его легче найти и сохранить. Его можно использовать в другом решении. Вы даже можете обменять его на совершенно другой уровень доступа к данным - скажем, переключение с Linq на SQL на Entity Framework или на классический ADO.Net.

Сохраняя Модели в отдельном проекте, на них можно ссылаться как на веб-сайте, так и на слое доступа к данным. Кроме того, проект моделей можно использовать в других решениях, как и слабосвязанный уровень доступа к данным.

Разделение слоев таким образом облегчает добавление тестирование, тоже. Это было бы проще, если на уровне/репозитории доступа к данным использовались интерфейсы и инъекции зависимостей.

+0

Большое спасибо, я читаю учебники mpc asp.net и не имею этого способа работать. Я новичок в MVC. – NewCastle79

+0

@ NewCastle79: ознакомьтесь с [Учебник по Университету Контосо] (http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model -дль-ан-Asp-сетчатая MVC-приложения). Он помещает все в один проект, но имеет отдельную папку для кода уровня доступа к данным. Эта папка может быть перенесена в отдельный проект, как я и предложил. Я думаю, что это отличный учебник. – DOK

1

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

+0

Я читаю две книги и имею только примеры с linq и EF. – NewCastle79

+0

Я не уверен, какой подход они берут, но из примеров, которые я видел, Модель - это сущности, которые вы определили в сопоставлениях структуры сущности. Обычно ваш контроллер получает экземпляр контекста данных EF и объекты запроса на основе значений, переданных контроллеру. Затем контроллер передает объект модели в визуализируемое представление. Объекты модели не должны содержать никакой логики, просто простых свойств, которые используется для представления страницы. Контроллер содержит логику доступа к данным. В представлении содержится вся логика рендеринга и отображения. –

+0

сейчас я понимаю, что вы пытаетесь сказать, большое спасибо w.brian – NewCastle79

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