结合EF5.0讲MVC4(四)--将我们的程序改成数据库优先模式
本节导航
1、在MSSQL2008R2中创建Movie数据库
2、添加ADO.NET实体数据模型
3、修改数据上下文
4、运行效果
一、在MSSQL2008R2中创建数据库
首先,我们需要在MSSQL2008R2中创建一个名为Movie的数据库,具体的参数这里不讲,默认即可。然后【新建查询】。
因为在我们之前的代码中,我们已经通过code first创建好了我们需要使用的数据库和表,所以我们只需要将这些表结构倒出来然后放到刚刚的新建查询里去执行就可以了。由于先前的库在localdb中,所以,我们需要在vs中打开localdb的连接。
然后在表名上右键选择【打开表定义】,获得创建表的T-SQL语句。然后拷贝T-SQL语句到新建查询窗口。以此类推,将三个表的创建语句都拷贝到MSSQL2008R2中,在新建查询里,看起来应该是这样的:
在这里面,大家会发现,我优化了数据类型的长度,在code first中,字符串类型的长度都是MAX,我在这里依据实际情况稍加了修改。
然后点击【执行】创建数据库表。创建完成之后,我们做后续的工作。
二、添加ADO.NET实体数据模型
我们在【Models】文件夹上右键选择【添加】--【新建项】,打开如图所示窗口
点击左侧导航中的【数据】,然后选择右侧的【ADO.NET Entity Data Model】,(我这里是英文版的),名称叫做Movie.edmx。接下来出现如下对话框
选择从数据库更新
创建一个新的连接到我们MSSQL2008R2中的Movie库。
创建一个新的连接到我们MSSQL2008R2中的Movie库。
添加我们需要导入到实体模型中的表、视图和存储过程等。
点击完成之后,可能会出现“代码会威胁电脑安全”之类的警告,这里选择依然保存就可以了。然后我们的【Models】文件夹就变成了这个样子:
生成项目,如果没有错误,继续下面的操作。
三、修改数据上下文
需要注意的是,我们在前几节当中做的都是code first,所以有些代码在数据库优先下没有必要存在,这里我们需要做一下修改。首先是数据上下文文件MovieContext。我们注释掉OnModelCreating()方法。
//protected override void OnModelCreating(DbModelBuilder modelBuilder) //{ // //base.OnModelCreating(modelBuilder); // modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); //}
因为这里我们换了数据库,那么数据库连接字符串也要有相应的改变。我们可以到web.config当中看一眼,是不是多了一个连接,而这个连接正是我们创建实体模型是使用到的。既然已经有了连接串,我们需要做的工作是告诉DbContext我们要使用哪个连接串,这个在前面的章节中已经讲到过,直接看代码
private const string CONNECTION_STRING = "name=movieEntities"; public MovieContext() : base(CONNECTION_STRING) { }
做完这些之后,我们的MovieContext看起来就成了这个样子:
public class MovieContext:DbContext { private const string CONNECTION_STRING = "name=movieEntities"; public MovieContext() : base(CONNECTION_STRING) { } public DbSet<Movie> Movie { get; set; } public DbSet<Author> Authors { get; set; } public DbSet<OperLog> OperLog { get; set; } //protected override void OnModelCreating(DbModelBuilder modelBuilder) //{ // //base.OnModelCreating(modelBuilder); // modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); //} }
接下来,还有一次要进行修改,那就是Global.asax,因为在这里面我们注册了一个数据库初始化的操作 ,我们需要将这行代码注释掉或者删掉。
//Database.SetInitializer<MovieContext>(new Initializer());
做完这些之后,生成,没有错误之后就可以按F5看一下运行效果了。当然因为我们换了新库,数据是没有了的,需要我们再添加一些数据进去。
四、运行效果
数据库里
需要注意:在EF4.1中,创建实体模型时,不会自动创建代码生成项,需要我们在模型界面上右键,选择【添加代码生成项】,这样就不会报“the type '' was not mapped”错误了。