一、什么是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. group by语句

  2. uC/OS-II类型定义

    /*************************************************************************************************** ...

  3. Servlet Request的 getInputStream() getReader() getParameter()

    如果你知道了这三者的区别,请忽略 最近碰到了servlet对入参获取方式的处理问题,因为二方库处理不当,导致了获取不到入参的情况,之前也知道这三个方法不兼容,现简单介绍下 1.这三个获取入参的方法,是 ...

  4. 利用jquery实现网站中对应栏目下面内容切换效果。

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. Codeforces Problem 708A Letters Cyclic Shift

     题目链接: http://codeforces.com/problemset/problem/708/A 题目大意: 从字符串s中挑选出一个子串(非空),将该子串中的每个字母均替换成前一个字母,如' ...

  6. yourtour的几种链接

    php,html {:URL('User-Register/index')}    格式:http://www.xxx.com/index.php?g=User&m=User&a=in ...

  7. ELMAH日志组件数据库脚本

    CREATE TABLE dbo.ELMAH_Error ( ErrorId UNIQUEIDENTIFIER NOT NULL, Application NVARCHAR() COLLATE SQL ...

  8. Request.GetOwinContext()打不到

    Although it's in the Microsoft.Owin.Host.SystemWeb assembly it is an extension method in the System. ...

  9. 不下载SDK启动Android Studio

    一.不下载SDK启动Android Studio 给一个解决方法:Android Studio安装目录下的bin,idea.properties:idea.properties文件末尾加一行:disa ...

  10. [Unity3D][转] 关于Assets资源目录结构管理

    分享个我们项目常用的目录结构,微调过很多次,最终到了这个版本.个人认为这种管理资源方式是不错的.欢迎探讨各个细节~ 更新于2013.5.30   Asserts   --Editor 自写的灵活方便插 ...