五、 创建连接串连接本地数据库(ASP.NET MVC5 系列)
1. 创建连接串连接本地SQLServer数据库
上节讲到MovieDBContext类,这个类的作用是连接数据库并将Movie对象迁移到数据库记录中。不过你会问一个问题:如何知道这个对象将连接哪个数据库呢?事实是你并没有指定所用的数据库,EF框架将默认使用本地数据库(LoaclDB).在这一章节中我们将给这个应用程序的web.config文件中添加一个连接字符串。
2. SQL Server自带的Express版的LocalDB
LocalDB是在需求启动并运行在用户模式下的一个轻量级版本的SQL Server Express数据库引擎。LocalDB运行在能够使你用.mdf为后缀的数据库文件工作的SQL Server Express的特别的执行模式。通常情况下,LocalDB的数据库文件在Web项目的App_Data文件夹下。
SQL Server Express在真实的Web应用程序开发过程中并不推荐使用。LocalDB的流行并不是因为其在Web应用程序开发的使用,而是因为它的工作设计不依赖于IIS。此外,LocalDB数据库也很容易的迁移到SQL Server或者SQL Azure上。
在VS2013(和VS2012)中,LocalDB是默认安装到Visual Studio中的。
在默认的情况下,EF框架将查找一个与context类(此例是MovieDBContext)同名的连接字符串。想了解更多的信息,请查看ASP.NET应用程序的SQL Server连接串。
打开这个应用程序末尾的Web.config文件(注意:不是Views文件下的Web.config),如下所示:
找到这个<connectionStrings>元素:
在Web.config文件中添加下面的连接字符串到<connectionStrings>元素中.
1 <add name="MovieDBContext" 2 connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Movies.mdf;Integrated Security=True" 3 providerName="System.Data.SqlClient" 4 />
下面的例子中显示了部分Web.config文件中新添加的连接字符串:
1 <connectionStrings> 2 <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-MvcMovie-20130603030321.mdf;Initial Catalog=aspnet-MvcMovie-20130603030321;Integrated Security=True" providerName="System.Data.SqlClient" /> 3 <add name="MovieDBContext" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Movies.mdf;Integrated Security=True" providerName="System.Data.SqlClient" 4 />
这两个连接字符串非常相似。第一个连接串叫做DefaultConnection被用于成员数据库,用来控制合法用户进入该应用程序。新添加的连接串在App_Data文件夹下指定了一个命叫Movie.mdf的LocalDB数据库。在这本教程中我们并没有使用成员数据库,想了解更多关心成员,授权和安全性的信息,请查询Deploy a Secure ASP.NET MVC app with Membership, OAuth, and SQL Database to a Windows Azure Web Site
注意:连接串的名字必须和DbContext类的名字相匹配。
1 using System; 2 using System.Data.Entity; 3 4 namespace MvcMovie.Models 5 { 6 public class Movie 7 { 8 public int ID { get; set; } 9 public string Title { get; set; } 10 public DateTime ReleaseDate { get; set; } 11 public string Genre { get; set; } 12 public decimal Price { get; set; } 13 } 14 15 public class MovieDBContext : DbContext 16 { 17 public DbSet<Movie> Movies { get; set; } 18 } 19 }
实际上你没有添加MovieDBContext的连接串。如果你没有指定一个连接串,EF框架将在用户的直接目录用DbContex类的全名(此例是MvcMovie.Models.MOvieDBContext)创建一个LocalDB数据库。当然你可以命名任何你喜欢的数据库名,前提是数据库名字的后缀是.MDF.例如:我们可以命名数据库为MyFilms.mdf.
接下来,你可以编译这个MoviesController类了,用来显示新的 movie数据和让你创建新的movie列表了。