VS2017 ASP.NET MVC连接LocalDB——asp.net mvc笔记(3)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Richard1997/article/details/87302059

   写在前面的话

   觉得之前的入门程序太简单,那么就来点真实点的Demo。好吧,这个Demo也是微软最开始推MVC的电影Demo,玩得不要了,而且我也将其阉割。可是,网上的博客大部分用的还是VS2013(2),而且千篇一律,我已无力吐槽。需要说明的是,我这个也基本是同一个Demo,而且大部分代码是从一年前老师的ppt上copy的,但是我想把遇到的坑记下并分享出来,这是初衷,因为编程的环境不断在更新。

    开始

     LocalDB本身是VS安装好后自带的一个免费微型数据库,和MS SQL Server用法类似,区别就是它不带Server,有点像Redis。所以LocalDB很适合自己本机测试玩,当然生产环境不太可能用这个。如果想用MSSqlServer,这里是2012express版下载地址,下载这两个:ENU\x64\SQLEXPR_x64_ENU.exe;ENU\x64\SQLManagementStudio_x64_ENU.exe 图形化管理工具,都可以折腾。

   然后简单介绍一下Entity Framework(EF),就是一种ORM框架,方便从对象与表之间相互映射,免得从底层一个一个字段获取再封装成类。

   第一步是安装EF。从版本5开始使用NuGet安装,vs2017右键项目名(不是解决方案名)选择管理NuGet程序包->选择浏览即可找到EntityFramework安装。

切到浏览页,很容易看到EF:

 点击下载后接受协议安装即可。安装好后可以看到项目的引用中有了EF相关的东西:

 同时Web.config(全局那个,不是Views目录下的)多了以下代码:

第二步,创建模型类和对应的数据库上下文类,右击Models文件夹添加类,取名为Movie.cs(如果你的EF安装没问题的话Entity那个包导入也就没问题):

using System;
using System.Data.Entity;

namespace AspMVCFirst.Models
{
    public class Movie
    {
        public int ID { get; set; }              //电影编号
        public string Title { get; set; }      //电影名称
        public DateTime ReleaseDate { get; set; } //上映时间
        public string Genre { get; set; }    //电影类型
        public decimal Price { get; set; }  //电影票价
        public string Rating { get; set; }   //电影分级
    }

    public class MovieDBContext : DbContext
    {
        public DbSet<Movie> Movies { get; set; }
    }

}

  第三步,给Web.config文件(全局那个,不是Views目录下的)添加连接字符串。有的VS里可能有一个默认的ConnectionString,里面有个名为DefaultConnection的Data Source,这种情况就在这个基础上再加上一个格式类似的连接串。可是我的没有,我只能手动添加(在<configuration>里面且在 <appSettings>上面,这里的name取名为上面的电影数据库上下文类的类名):

  <connectionStrings>
    <add name="MovieDBContext" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Movies.mdf;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>

 第四步,添加控制器和视图。添加一个控制器MoveisController和两个Action(一个Index,一个Create,这里都是手工添加视图):

 新建一个空控制器MoviesController修改编码如下:

using System.Web.Mvc;

namespace AspMVCFirst.Controllers
{
    public class MoviesController : Controller
    {
        // GET: Movies
        public ActionResult Index()
        {
            return View();
        }

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

右击Views目录的Movies子目录,添加一个Create视图,点击添加(第一次可能需要花一些时间下载js和css样式文件):

Create.cshtml编码如下:


@{
                /**/

                ViewBag.Title = "Create";
}

<h2>Create</h2>

<form action="/Movies/Create" method="post">
    <div>
        <label>电影名称</label>  <input type="text" name="Title" />
    </div>
    <div>
        <label>上映日期</label>  <input type="text" name="ReleaseDate" />
    </div>
    <div>
        <label>电影类型</label>  <input type="text" name="Genre" />
    </div>
    <div>
        <label>电影票价</label>  <input type="text" name="Price" />
    </div>
    <div>
        <label>电影分级</label>  <input type="text" name="Rating" />
    </div>
    <div>
        <input type="submit" value="创建" />
    </div>
</form>
<div>
    <a href="/Movies">返回</a>
</div>

  修改MoviesController的代码,添加Create的后台部分:

using AspMVCFirst.Models;
using System.Web.Mvc;

namespace AspMVCFirst.Controllers
{
    public class MoviesController : Controller
    {
        private MovieDBContext db = new MovieDBContext();
        public ActionResult Index()
        {
            return View();
        }
        // 这个Create用来创建页面
        public ActionResult Create()
        {
            return View();
        }
        [HttpPost]
        public ActionResult Create(Movie movie)
        {
            db.Movies.Add(movie);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
    }
}

 继续修改控制器向Index视图传递数据:

using AspMVCFirst.Models;
using System.Web.Mvc;
using System.Linq;
using System;

namespace AspMVCFirst.Controllers
{
    public class MoviesController : Controller
    {
        private MovieDBContext db = new MovieDBContext();
        public ActionResult Index()
        {
            var movies = from m in db.Movies
                         where m.ReleaseDate > new DateTime(2010, 6, 1)
                         select m;
            return View(movies.ToList());
        }
        // 这个Create用来创建页面
        public ActionResult Create()
        {
            return View();
        }
        [HttpPost]
        public ActionResult Create(Movie movie)
        {
            db.Movies.Add(movie);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
    }
}

 添加Index视图,,同样在Movies目录下创建:

Index.cshtml编码如下:


@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>
@model IEnumerable<AspMVCFirst.Models.Movie>
<table width="100%">
    <tr>
        <th> 电影名称 </th>
        <th> 上映日期 </th>
        <th> 电影类型 </th>
        <th> 电影票价 </th>
        <th> 电影分级 </th>
        <th> 操作 </th>
    </tr>
    @foreach (var item in Model)
    {
<tr>
    <td> <label>@item.Title</label> </td>
    <td> <label>@item.ReleaseDate</label> </td>
    <td> <label>@item.Genre</label> </td>
    <td> <label>@item.Price</label> </td>
    <td> <label>@item.Rating</label> </td>
   
</tr>   }
</table>

这样,手动添加视图的方式就基本完成了,我们Ctrl+F5运行一下项目:

修改url试试添加:

点击创建按钮后跳转至Index页面显示如下:

这样,一个基本的Demo就搞好了。还可以看看新生成的数据库在哪个地方:

1..点击解决方案资源管理器中的查看所有文件:

可以看到App_Data目录下多了一个Movies.mdf文件(Web.config中定义的connectionString):

然后点击服务器资源管理器(没有的话在菜单栏的视图中找),右击数据连接刷新,就可以看到通过EF的codefirst自动生成的数据库:

可以看看Movies表中的数据是否是Create视图创建的数据!

最后源码参考!

猜你喜欢

转载自blog.csdn.net/Richard1997/article/details/87302059