必备条件
要完成本项目你需要安装vs2010或者vs2012,如果你安装的是vs2010,那么,还要安装nuget,一个vs的包管理工具插件1.建立应用程序
下面我们将建立一个控制台应用程序来说明database first的使用问题.打开vs
.菜单 文件->新建->项目
.在打开的窗口中,左侧选择window,右侧选择console application(控制台应用程序)
.项目名称 ModelFirstSample
.单击确定
2.建立数据模型
下面我们将要用ef设计器,来制作data model.打开vs,项目->添加新项
.左侧选择数据,右侧选择数据实体模型
.填入BloggingModel 作为名字,确定
.打开的窗口中,选择空模型,结束,如下图
接着ef会自动用设计器打开空的data model,现在让我们为data modle添加一些实体和属性吧
.在设计器上右键,属性
.在属性窗口中,把entity container name 换成 BloggingContext
.在设计器右键,添加新项->实体
.实体名称 Blog 实体集合 Blogs 属性名称 BlogId,确定,如下图
.继续上面的步骤,添加Name和Url属性
.添加完Url属性后,在其上右键,属性,把bullable设成true
.继续上面的步骤,添加Post实体,主属性为PostId
.接着添加Tile和Content属性
现在我们已经有了两个实体,是时间建立他们之间的联系啦
.在设计器上右键添加关联
.在弹出框中,填写如下图
现在已经建立了连个实体,也添加了它们见得关联,data model如下
如果你用的是vs2010,那么你需要提前做以下几步
首先,我们需要用nuget更新安装的ef版本
.菜单,项目->管理nuget程序包(你需要提前安装nuget)
.选择在线标签
.选择entityframework包
.单击安装
接着,为了让ef自动生成dbcontext api,我们需要安装下面的包
.在一个data model的设计器上右键,添加代码生成项
.选择在线模板,搜索DbContext
.选择EF 5.x DbContext Generator for C# ,填入BloggingModel 作为名称,添加,如下图
3.生成数据库
我们只需在配置一下,ef便可以更具我们建立的data model 映射出database中的表我们要使用的数据库服务依赖于你安装的vs版本
.如果你安装的是vs2010,我们将要建立的数据库是基于sql express的(安装vs2010完整版,会安装sql express)
.若果你安装的是vs2012,我们将要建立的数据库是基于localdb的(安装vs2012完整吧,会安装)
.关于localdb的详细信息,参考这里下面的地址
LocalDB:微软的新生代轻量级数据库
SQL Server 2012 LocalDB 管理之旅
SQL Server 2012 Express LocalDB
下面让我们来生成数据库吧!
.在设计器上右键,选择从模型生成数据库
.建立新的连接,填写下图
.单击确定,会询问你时候建立新的数据库,选择是
.单击下一步,ef设计器将会建立数据库模式的脚本
.当脚本生成后,单击结束,脚本将会自动添加到你的项目中,并且会自动打开
.在脚本上右键,执行,将会根据你的配置和data model建立数据库
4.使用ef读写数据
通过上面的操作,我们已经有了我们自己的数据库额和data model了,接下来我们要利用data model来存储数据,下面的截屏是基于vs2012的,如果你用的是,vs2010,那么BloggingModel.tt 和 BloggingModel.Context.tt文件不是在.edmx文件下面,而是直接位于项目下面的为了专注于ef本身,我们直接在main函数中来实现数据存储,在main函数中,我们首先生成一个context,然后利用它向数据库中插入一个新的blog,然后,用linq从数据库中查出所有的blogs
class Program
{
static void Main(string[] args)
{
using (var db = new BloggingContext())
{
// Create and save a new Blog
Console.Write("Enter a name for a new Blog: ");
var name = Console.ReadLine();
var blog = new Blog { Name = name };
db.Blogs.Add(blog);
db.SaveChanges();
// Display all Blogs from the database
var query = from b in db.Blogs
orderby b.Name
select b;
Console.WriteLine("All blogs in the database:");
foreach (var item in query)
{
Console.WriteLine(item.Name);
}
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
}
接下来,运行程序,如下图
5.处理数据模型改变的情况
当我们对data model结构改变时,我们需要把这种改变映射到数据库首先让我们对我们的data model做一些改变吧,我们将要添加一个User实体,并添加一个主属性username为string类型,如下图
.在username属性上右键,选择属性,把maxlength设置成50
.再添加一个DisplayName属性
现在data model已经做了改变,接着需要更新database了
.用ef设计器打开已有的model,右键从模型更新数据库,将打开更新向导
.在更新向导中,选择实体,结束
.如果出现警告,选择是即可,
.接着会自动生成更新数据库的sql脚本,并且会自动打开,在脚本上右键,执行,更新完成