Database First(数据库优先)

必备条件

要完成本项目你需要安装vs2010或者vs2012,如果你安装的是vs2010,那么,还要安装nuget,一个vs的包管理工具插件

1.建立数据库

要使用database first,我们首先必须有一个数据库来存储我们要使用的数据
我们要使用的数据库服务依赖于你安装的vs版本
.如果你安装的是vs2010,我们将要建立的数据库是基于sql express的(安装vs2010完整版,会安装sql express)
.若果你安装的是vs2012,我们将要建立的数据库是基于localdb的(安装vs2012完整吧,会安装)
.关于localdb的详细信息,参考这里下面的地址
LocalDB:微软的新生代轻量级数据库
SQL Server 2012 LocalDB 管理之旅
SQL Server 2012 Express LocalDB
下面让我们来生成数据库吧!
.打开vs
.打开菜单 视图->服务器资源管理器
.扎起数据连接上右键,添加链接
.如图选择datasource的类型

.配置连接数据库(LocalDb ((localdb)\v11.0) 或者 SQL Express (.\SQLEXPRESS))的参数,并填写数据库的名称,如下图


.上面我们填写的数据库名字,在数据库中是不存在的,会提示我们是否创建此数据库,单击是,如下图


.新建的数据库会立即出现在数据连接的节点下,在此数据库上右键,建立新查询,复制下面的sql到窗口中,执行
CREATE TABLE [dbo].[Blogs] ( 
    [BlogId] INT IDENTITY (1, 1) NOT NULL, 
    [Name] NVARCHAR (200) NULL, 
    [Url]  NVARCHAR (200) NULL, 
    CONSTRAINT [PK_dbo.Blogs] PRIMARY KEY CLUSTERED ([BlogId] ASC) 
); 
 
CREATE TABLE [dbo].[Posts] ( 
    [PostId] INT IDENTITY (1, 1) NOT NULL, 
    [Title] NVARCHAR (200) NULL, 
    [Content] NTEXT NULL, 
    [BlogId] INT NOT NULL, 
    CONSTRAINT [PK_dbo.Posts] PRIMARY KEY CLUSTERED ([PostId] ASC), 
    CONSTRAINT [FK_dbo.Posts_dbo.Blogs_BlogId] FOREIGN KEY ([BlogId]) REFERENCES [dbo].[Blogs] ([BlogId]) ON DELETE CASCADE 
);

2.建立应用程序

下面我们将建立一个控制台应用程序来说明database first的使用问题
.打开vs
.菜单 文件->新建->项目
.在打开的窗口中,左侧选择window,右侧选择console application(控制台应用程序)
.项目名称 DatabaseFirstSample
.单击确定

3.用已有的数据库映射data model(数据模型)

.打开vs,项目->添加新项
.左侧选择数据,右侧选择数据实体模型
.填入BloggingModel 作为名字,确定
.打开的窗口中,选择从数据库生成,下一步,如下图


.选择你上面建立的数据库,填入BloggingContext 作为连接名,下一步,如下图


.选择要映射的表,确定,如下图,


data model映射成功后,.edmx文件变会被加入到你的项目中,一个app.config也会被加入到你的项目中,里面包含你的连接字符串,同时会用ef的设计器打开data model,如下图


如果你用的是vs2010,那么你需要提前做以下几步
首先,我们需要用nuget更新安装的ef版本
.菜单,项目->管理nuget程序包(你需要提前安装nuget)
.选择在线标签
.选择entityframework包
.单击安装
接着,为了让ef自动生成dbcontext api,我们需要安装下面的包
.在一个data model的设计器上右键,添加代码生成项
.选择在线模板,搜索DbContext
.选择EF 5.x DbContext Generator for C# ,填入BloggingModel.tt作为名称,添加,如下图

4.使用ef读写数据

通过上面的操作,我们已经有了我们自己的data model了,接下来我们要利用data model来存储数据,data model也就是自动生成的.edmx文件,下面的截屏是基于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
首先让我们对我们的数据库做一些改变吧,我们将要添加一个uers表
.在服务器资源管理器,数据链接节点找到DatabaseFirst.Blogging数据库,右键添加一个新查询
.把下面的sql复制进去,执行
CREATE TABLE [dbo].[Users] 

        [Username] NVARCHAR(50) NOT NULL PRIMARY KEY,  
    [DisplayName] NVARCHAR(MAX) NULL 
)
现在数据库已经做了改变,接着需要更新model了
.用ef设计器打开已有的model,右键从数据库更新模型,将打开更新向导

.在更新向导中,选择tables,


.单击结束,完成更新
下面是更新后的data model图

总结

本章节,我们共做了这么几件事,首先我们建立了一个数据库,然后用新建的数据库映射出data model,后来利用data model来存储数据,最后,我们对数据库做了更新,并为data model同步了这种更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值