Добавьте к своему списку кривой обучения следующие элементы:
Шаблон репозитория
Задайте себе следующий вопрос: зачем мнеуровень обслуживания?
Прочитайте книгу Стивена Сандерсона.Он учит вас думать в MVC.
Вышесказанное относится к вашим проблемам, потому что ваши проблемы явно связаны с наличием кода в ваших контроллерах, который должен быть в вашей модели (то есть кода доступа к даннымдолжен быть в классе репозитория).То есть вы не думаете о MVC.
Ваша модель должна включать в себя необходимые классы репозитория, например, DealRepository.
Вам нужен класс Service для сопоставленияобъекты, которые ваш репозиторий выкапывает из вашей базы данных в ваш класс модели: таким образом, проблемы преобразования включаются в код уровня обслуживания.
Если вы сделаете это, вы можете написать в свой контроллер:
public ActionResult Index()
{
return(DealService.GetByZipcode(92612));
}
Где DealService.GetByZipcode в основном просто сопоставляет DealRepository.GetByZipcode (92612) с вашим классом модели и возвращает результат сопоставления.
Метод DealRepository.GetByZipcode будет примерно равен:
public static DealEntity GetByZipcode(string zip)
{
LinqToDealsDataContext db = new LinqToDealsDataContext();
XElement xmlTree = XElement.Parse("<Request><ZipCode>" + zip + "</ZipCode></Request>");
var deals = db.spSearchDeals(xmlTree);
return deals;
}
Класс DealEntity - это то, что дает вам Linq для вашей таблицы.
Причина, по которой все это происходит:
Причина этой структуры следующая:
а.Весь ваш код доступа к данным находится в одном месте: DealRepository.Вы можете проверить и отладить это независимо от всего остального.
b.Код сопоставления находится в одном месте: DealService.Вы можете проверить и отладить это независимо от всего остального.
c.Другими словами, вам нужно правильно разделить свои проблемы.
Проблема с вашим существующим кодом состоит именно в том, что вы НЕ разделяли проблемы.То есть, вы взяли прибор MVC и поместили его в кухонный комбайн, и у вас возникло множество проблем, с которыми гораздо сложнее справиться, чем нужно.
Ваша модель смешана с вашим контроллером, нет репозитория, нет сервисного уровня.
Так что держите лошадей ненадолго и найдите время, чтобы прочитать книгу Стива Сандерсона.
Я бы также попробовал смоделировать более простую задачу.Этот синтаксический анализ XML заставляет мою голову болеть даже в хороший день.
ПРИМЕЧАНИЕ:
Вы можете серьезно улучшить свои соглашения об именах.LinqToDealsDataContext?Ты шутишь, верно?