пʼятницю, 6 лютого 2009 р.

Туториал Первый - База данных фильмов

Создаем проект File -> New Project -> Visual C# -> Web -> ASP.NET MVC Web Application.
После выбора имени проекта и выбора папки для размещения оного, появится диалоговое окно, в котором мы отказываемся от любезного предложения сразу добавить Unit-тесты.
Теперь, в Solution Explorer`е в папке AppData создаем базу Movies.dbf
В ней таблицу:

Id Int False
Title Nvarchar(100) False
Director Nvarchar(100) False
DateReleased DateTime False
При чем id ставим уникальным ключем, identity specification - 1.
Потом вводим данные:
Внимание, картинки, как и сами туториалы взяты из оф. сайта, на будущее, так что all rights reserved (c) как говорят =)


Таак, это была т.н., подноготная нашей работы, сейчас приступаем к создание соббственно
МОДЕЛИ
отображения наших данных.
В моем вольном переводе это означает набор классов для отображения данных.
И тут, (я пишу блог в первую очередь для себя, и дальше таких пояснений делать не буду) YES! У меня наконец получилось добавить в папку с моделями проекта именно ADO.NET Entity Data Model, раньше когда у меня стояла студия без сервис пака, выбора такого типа данных для модели не было!
Что-то я увлекся =)
Клацаете правой кнопкой мышки на Models, Add New Item -> Data -> ADO.NET Entity Data Model. От английского первоначального туториала лучше не отходить даже в именовании файлов, так что сохраняем его так: MoviesDBModel.edmx
Жмем кнопку создать, проходим простой визард, ничего! не меняя от начальных настроек, попутно смотрим и внимательно читаем с чем мы соглашаемся, так, пригодится м.б. потом. У меня получилось

а у вас?

Вот и отлично, теперь перейдем к созданию Контроллера
Контроллер отвечает за взаимодействие пользователя и нашего приложения.
Приступим, если вы уже успели понажимать мышкой по каждой папке нашего проекта, подумать что они значат, зачем, и что внутри, то наверняка увидели в папке Controllers 2 файла, зачем они нам, пока сам не знаю, ясно только, что стандартные. Клацаем на папке правой кнопкой, Add -> Controller
Далее в туториале написано назвать его HomeController, тут-то мы попадаем впросак - такой файл имеется (
Я переименовал существующий файл в *.cs.bak, и уже в новом написал:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;

namespace MovieApp.Controllers
{
  public class HomeController : Controller
  {
    //
    // GET: /Products/

    public ActionResult Index()
    {
      return View();
    }

    //
    // GET: /Products/Details/5

    public ActionResult Details(int id)
    {
      return View();
    }

    //
    // GET: /Products/Create

    public ActionResult Create()
    {
      return View();
    }

    //
    //POST: /Products/Create

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Create(FormCollection collection)
    {
      try
      {
        return RedirectToAction("Index");
      }
      catch
      {
        return View();
      }

    }

  }
}

* This source code was highlighted with Source Code Highlighter.


Немного пояснений. Index() - метод контроллера который вызывается при загрузке вашего приложения. Далее мы будем использовать этот метод для отображения данных, которые хранятся в таблице.
В листинге №2 я модифицирую класс контроллера что бы у него был новый конструктор, который создаст обьект класса MoviesDBEntities и привяжет к нему поле private _db, обьект MoviesDBEntities представляет нашу модель.

Я модифицирую метод Index(), который будет привязан к свойству ViewData.Model, ViewData пройдет от контроллера к отображению (View)
using MovieApp.Models;

namespace MovieApp.Controllers
{
  public class HomeController : Controller
  {
    private MoviesDBEntities _db;
    public HomeController()
    {
      _db = new MoviesDBEntities();
    }

    //
    // GET: /Products/
  public ActionResult Index()
  {
    ViewData.Model = _db.MovieSet.ToList();
    return View();
  }

* This source code was highlighted with Source Code Highlighter.

Теперь что бы не было ошибок, нужно переименовать в дизайнере класс Tasks на Movie, что в свою очередь сделает доступным _db.MovieSet.

Немає коментарів:

Дописати коментар