一、什么是Entity Framework

1.1 实体框架(EF)是一个对象关系映射器,使.NET开发人员使用特定于域的对象与关系数据。它消除了需要开发人员通常需要编写的大部分数据访问代码。简化了原有的ado.net 数据访问方式。 ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。

1.2 在C#中常用的ORM框架有:

1.NHibernate (从java的Hibernate延伸过来)
2.Linq to SQL类 (只针对MSSQL数据库的)
3.Entity FrameWork(微软的一个开源的ORM,可以针对多种主流数据库(如MSSQL、MySql、Oracle等))

1.3 本文暂时编写关于Entity Framework文章,后续有时间会补充NHibernate,Linq to SQL系列文章。

二、Entity Framework Database first(数据库优先)使用过程

2.1 建立数据库

2.1.1 建立表Blogs

1 CREATE TABLE [dbo].[Blogs] (
2     [BlogId] INT          NOT NULL,
3     [Name]   VARCHAR (50) NULL,
4     [Url]    VARCHAR (50) NULL,
5     PRIMARY KEY CLUSTERED ([BlogId] ASC)
6 );

2.1.2 建立表Posts

1 CREATE TABLE [dbo].[Posts]
2 (
3     [PostId] INT NOT NULL PRIMARY KEY,
4     [Title] VARCHAR(50) NULL,
5     [Content] VARCHAR(50) NULL,
6     [BlogId] INT NULL,
7     CONSTRAINT [FK_Posts_ToBlogs] FOREIGN KEY (BlogId) REFERENCES [Blogs](BlogId)
8 )

2.2 建立项目

2.2.1 新建一个控制台项目
2.2.1 添加—》新建项—》数据—》ADO.NET实体数据模型—》添加—》从数据库生成—》下一步—》新建连接(连接设置刚刚自己使用的数据库)—》下一步—》选中自己要使用的表,以及视图。存储过程等—》完成

2.3 使用(个人建立的实体数据名称为:BloggingModel)

2.3.1 文件简介
App.config :配置文件,此文件已包含实体数据的数据库链接等基本信息

1 <connectionStrings>
2     <add name="BloggingContext" connectionString="metadata=res://*/BloggingModel.csdl|res://*/BloggingModel.ssdl|res://*/BloggingModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(localdb)\v11.0;initial catalog=DatabaseFirst.Blogging;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
3   </connectionStrings>

BloggingModel.Context.cs:实体数据模型的上下文(BloggingModel.Context.tt下)

BloggingModel.tt:这个下面包含了 具体的实体(也就是以数据库表为单位的类)

2.3.2 编写基本测试程序

1             using (var db = new BloggingContext())
 2             {
 3                 Console.WriteLine("输入一个新的Blog名称");
 4                 var name = Console.ReadLine();
 5
 6                 var blog = new Blogs {Name=name };
 7                 db.Blogs.Add(blog);
 8                 db.SaveChanges();
 9
10                 var query = from b in db.Blogs
11                             orderby b.Name
12                             select b;
13                 foreach (var item in query)
14                 {
15                     Console.WriteLine(item.Name);
16                 }
17                 Console.ReadKey();
18             }

至此基本使用结束

2.4 扩展使用

2.4.1 增加数据库表(Users)

1 CREATE TABLE [dbo].[Users] (
2     [Username]     NVARCHAR (128) NOT NULL,
3     [display_name] NVARCHAR (MAX) NULL,
4     CONSTRAINT [PK_dbo.Users] PRIMARY KEY CLUSTERED ([Username] ASC)
5 );

2.4.2 更新实体数据模型

双击打开BloggingModel.edmx—》空白处,右键单击—》从数据库更新模型—》选中要添加的数据表即可(此时也可以执行删除表)。

三、Entity Framework Model first(模型优先)使用过程

3.1 新建项目

新建一个控制台项目即可

3.2 新建实体数据模型

添加—》新建项—》数据—》ADO.NET实体数据模型—》空模型—》完成

3.3 添加实体模型(打开BloggingModel.edmx)

3.3.1 修改“实体容器名称”:在BloggingModel.edmx中,空白处右键单击—》属性—》实体容器名称—》(修改成自己想要的名称)

3.3.2 添加实体

在BloggingModel.edmx中,空白处右键单击—》新增—》实体—》确定 
填写实体名称,修改实体集名称(这个是数据库表名称),以及修改属性名 
再在此实体上,右键单击—》新增—》标量属性,这里增加自己想要的字段即可,以及对此字段的属性修改。

同理即可新增多个实体

3.3.3 添加关系 
在BloggingModel.edmx中,空白处右键单击—》新增—》关联—》设置自己想要的关联关系—》确定

3.4 生成数据库

3.4.1 在BloggingModel.edmx中,空白处右键单击—》根据模型生成数据库—》新建连接(设置好数据库连接)—》确定—》下一步(这时会生成sql语句代码)—》完成。

3.4.2 打开SQL代码文件,右键—》连接—》连接自己上文创建的数据库即可—》执行SQL代码即可,查看数据库。至此模型优先基本完成

3.5 文件说明简介

App.config:配置文件:包含了数据库连接语句

1 <connectionStrings>
2     <add name="BloggingContext" connectionString="metadata=res://*/BloggingModel.csdl|res://*/BloggingModel.ssdl|res://*/BloggingModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(localdb)\v11.0;initial catalog=ModelFirst.Blogging;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
3   </connectionStrings>

BloggingModel.Context.cs:实体上下文类

Bloggingmodel.tt:下包含了数据实体类(也就是以数据库表为单位的实体类)

3.6 基本测试代码

1             Console.WriteLine("请输入一个Blogs名称");
 2             var name = Console.ReadLine();
 3
 4             using(var db=new BloggingContext())
 5             {
 6                 var blog = new Blog { Name = name };
 7                 db.Blogs.Add(blog);
 8                 db.SaveChanges();
 9
10                 var query = from b in db.Blogs
11                             orderby b.Name
12                             select b;
13                 foreach (var item in query)
14                 {
15                     Console.WriteLine(item.Name);
16                 }
17                 Console.ReadKey();
18             }

3.7 扩展应用—模型修改

3.7.1 打开BloggingModel.edmx,空白处右键—》新增—》实体(设置好要增加的实体)—》确定。

3.7.2 打开BloggingModel.edmx,空白处右键—》根据模型生成数据库—》完成(会有一个覆盖旧文件的警告)

3.7.3 打开重新生成的SQL语句,右键—》执行即可,查看数据库表。(此步可能会使已生成好的数据库数据,表结构发生改变,谨慎操作)

至此,基本介绍完成。

Entity Framework 之Database first(数据库优先)&Model First(模型优先)的更多相关文章

  1. 《ASP.NET MVC4 WEB编程》学习笔记------Entity Framework的Database First、Model First和Code Only三种开发模式

    作者:张博出处:http://yilin.cnblogs.com Entity Framework支持Database First.Model First和Code Only三种开发模式,各模式的开发 ...

  2. Entity Framework 实体框架的形成之旅--数据传输模型DTO和实体模型Entity的分离与联合

    在使用Entity Framework 实体框架的时候,我们大多数时候操作的都是实体模型Entity,这个和数据库操作上下文结合,可以利用LINQ等各种方便手段,实现起来非常方便,一切看起来很美好.但 ...

  3. C# ORM—Entity Framework 之Database first(数据库优先)&Model First(模型优先)(一)

    一.什么是Entity Framework 1.1 实体框架(EF)是一个对象关系映射器,使.NET开发人员使用特定于域的对象与关系数据.它消除了需要开发人员通常需要编写的大部分数据访问代码.简化了原 ...

  4. ASP.NET MVC+Entity Framework 4.1访问数据库

    Entity Framework 4.1支持代码优先(code first)编程模式:即可以先创建模型类,然后通过配置在EF4.1下动态生成数据库. 下面演示两种情形: 1.代码优先模式下,asp.n ...

  5. Entity Framework 连接低版本数据库

    使用EF6连接SQL2012生成的Edmx,分页时生成的查询语句使用了SQL 2012引入的新特性  OFFSET 0 ROWS FETCH NEXT 20 ROWS ONLY,结果在生产环境使用的数 ...

  6. UWP: 在 UWP 中使用 Entity Framework Core 操作 SQLite 数据库

    在应用中使用 SQLite 数据库来存储数据是相当常见的.在 UWP 平台中要使用 SQLite,一般会使用 SQLite for Universal Windows Platform 和 SQLit ...

  7. 让EF飞一会儿:如何用Entity Framework 6 连接Sqlite数据库

    获取Sqlite 1.可以用NuGet程序包来获取,它也会自动下载EF6 2.在Sqlite官网上下载对应的版本:http://system.data.sqlite.org/index.html/do ...

  8. 如何用Entity Framework 6 连接Sqlite数据库[转]

    获取Sqlite 1.可以用NuGet程序包来获取,它也会自动下载EF6 2.在Sqlite官网上下载对应的版本:http://system.data.sqlite.org/index.html/do ...

  9. ABP .Net Core Entity Framework迁移使用MySql数据库

    一.迁移说明 ABP模板项目Entity Framework Core默认使用的是Sql Server,也很容易将数据库迁移到MySQL,步骤如下. 二.迁移MySQL步骤 1. 下载项目 请到 ht ...

随机推荐

  1. HD2059龟兔赛跑(DP)

    题目链接 直接拿来当贪心做了=_=,然后就懵逼了 动态规划,本弱真没想到=_= #include <iostream> #include <cstdio> #include & ...

  2. 从Paxos到ZooKeeper-一、分布式架构

    本系列为本人读<从Paxos到ZooKeeper>一书的一些读书笔记,仅供学习使用,谢谢. 一.从集中式到分布式 1.1 分布式的定义: 分布式系统是一个硬件或软件组件分布在不同的网络计算 ...

  3. e_msg_c_as_login_req 和 e_msg_c_as_login_if_no_register_req

    e_msg_c_as_login_req e_msg_c_as_login_if_no_register_req 这两条协议差不多 第一个就是纯粹的登录,验证密码 第二个游戏中游客模式,直接登录的模式 ...

  4. 结合Hadoop,简单理解SSH

    在启动dfs和yarn时,需要多次输入密码,不但启动本机进程还有辅服务器启动那些节点也需要相应密码,主与辅服务器之间是通过SSH连接的,并发送操作指令 一.ssh密码远程登录 1.使用ssh连接另一台 ...

  5. Java关键字——final

    final在Java中表示的意思是最终,使用final关键字声明类属性.方法,注意: 1.使用final声明的类不能有子类 2.使用final声明的方法不能被子类所覆写 3.使用final声明的变量即 ...

  6. 利用a标签解析URL

    参考资料 http://www.cnblogs.com/Wayou/p/things_you_dont_know_about_frontend.html 很多时候我们有从一个URL中提取域名,查询关键 ...

  7. C++ Pointer-to-Member Selector

    http://www.codeguru.com/cpp/cpp/article.php/c17401/C-Tutorial-PointertoMember-Function.htm https://m ...

  8. Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布

       FastCGI编程包括四部分:初始化编码.接收请求循环.响应内容.响应结束循环. FCGX_Request request; FCGX_Init(); ); FCGX_InitRequest(& ...

  9. map reduce

    作者:Coldwings链接:https://www.zhihu.com/question/29936822/answer/48586327来源:知乎著作权归作者所有,转载请联系作者获得授权. 简单的 ...

  10. iOS版本控制git小结--yoowei

    # 显示隐藏文件 defaults write com.apple.finder AppleShowAllFiles Yes && killall Finder # 不显示隐藏文件 d ...