一、什么是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

 CREATE TABLE [dbo].[Blogs] (
[BlogId] INT NOT NULL,
[Name] VARCHAR (50) NULL,
[Url] VARCHAR (50) NULL,
PRIMARY KEY CLUSTERED ([BlogId] ASC)
);

    2.1.2 建立表Posts

 CREATE TABLE [dbo].[Posts]
(
[PostId] INT NOT NULL PRIMARY KEY,
[Title] VARCHAR(50) NULL,
[Content] VARCHAR(50) NULL,
[BlogId] INT NULL,
CONSTRAINT [FK_Posts_ToBlogs] FOREIGN KEY (BlogId) REFERENCES [Blogs](BlogId)
)

  2.2 建立项目

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

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

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

 <connectionStrings>
<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" />
</connectionStrings>

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

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

    2.3.2 编写基本测试程序

             using (var db = new BloggingContext())
{
Console.WriteLine("输入一个新的Blog名称");
var name = Console.ReadLine(); var blog = new Blogs {Name=name };
db.Blogs.Add(blog);
db.SaveChanges(); var query = from b in db.Blogs
orderby b.Name
select b;
foreach (var item in query)
{
Console.WriteLine(item.Name);
}
Console.ReadKey();
}

    至此基本使用结束

  2.4 扩展使用

    2.4.1 增加数据库表(Users)

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

    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:配置文件:包含了数据库连接语句

 <connectionStrings>
<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" />
</connectionStrings>

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

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

  3.6 基本测试代码

             Console.WriteLine("请输入一个Blogs名称");
var name = Console.ReadLine(); using(var db=new BloggingContext())
{
var blog = new Blog { Name = name };
db.Blogs.Add(blog);
db.SaveChanges(); var query = from b in db.Blogs
orderby b.Name
select b;
foreach (var item in query)
{
Console.WriteLine(item.Name);
}
Console.ReadKey();
}

  3.7 扩展应用—模型修改

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

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

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

    至此,基本介绍完成。   

      

C# ORM—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. Entity Framework 之Database first(数据库优先)&Model First(模型优先)

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

  4. [ORM] Entity Framework(1) CodeFirst快速入门

    Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案 对象关系映射(英语:Object Relational Mapping ...

  5. C# ORM—Entity Framework 之Code first(代码优先)(二)

    一.Entity Framework Code first(代码优先)使用过程 1.1Entity Framework 代码优先简介 不得不提Entity Framework Code First这个 ...

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

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

  7. ORM,Entity Framework介绍以及其所包含的基础架构介绍

    一:entity framework 6.0 ORM (实体关系模型) O: Domain Object 领域模型 R: Relational Database 关系型数据库 M: Mapping 映 ...

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

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

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

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

随机推荐

  1. HDOJ 2021 发工资咯:)(利用了一种取余的思想)

    Problem Description 作为杭电的老师,最盼望的日子就是每月的8号了,因为这一天是发工资的日子,养家糊口就靠它了,呵呵 但是对于学校财务处的工作人员来说,这一天则是很忙碌的一天,财务处 ...

  2. 数学概念——G 最大公约数

    G - 数论,最大公约数 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit ...

  3. MySQL错误代码大全

    130 :文件格式不正确.(还不是很清楚错误的状况)145  :文件无法打开.1005:创建表失败.1006:创建数据库失败.1007:数据库已存在,创建数据库失败.1008:数据库不存在,删除数据库 ...

  4. JavaScript 操作 DOM 常用 API 总结

    文本整理了javascript操作DOM的一些常用的api,根据其作用整理成为创建,修改,查询等多种类型的api,主要用于复习基础知识,加深对原生js的认识. 基本概念 在讲解操作DOM的api之前, ...

  5. Linux下设置文件权限

    文件权限示意图: 第一步:在终端创建用户 增加用户 useradd 用户名 设置密码 passwd 用户名 通过上述两条命令创建a1,a2两个用户. 第二步:在根目录使用管理员账号创建一个文件 在使用 ...

  6. python2.+进化至python3.+ 语法变动差异(不定期更新)

    1.输出 python2.+ 输出: print "" python3.+ 输出: print ("") 2.打开文件 python2.+ 打开文件: file ...

  7. [HDU 2068] RPG的错排 (错排问题)

    RPG的错排 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2068 题目大意: 有N个人对应N个名字,然后你去把每一个名字对应到每个人,只要求答对一半 ...

  8. Eclipse导入Gradle时报错:SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable

    百度查到http://stackoverflow.com/questions/19794200/gradle-android-and-the-android-home-sdk-location 按照其 ...

  9. java 新建文件夹保存

    String Txtname = field.getText();                File file3 =new File("D:\\MATP_robot"+&qu ...

  10. CF 19D Points 【线段树+平衡树】

    在平面上进行三种操作: 1.add x y:在平面上添加一个点(x,y) 2.remove x y:将平面上的点(x,y)删除 3.find x y:在平面上寻找一个点,使这个点的横坐标大于x,纵坐标 ...