c# mysql ef框架_C#:ORM--实体框架EF(entity framework)(2)

本文介绍了C#中使用Entity Framework(EF)框架的三种模式:Database First、Code First和Model First。Database First是从数据库生成Context和实体,Code First则是从代码创建数据库,Model First通过可视化设计器设计模型。文章还提供了VS配置EF环境的步骤,以及使用EF进行增删改查的操作示例。
摘要由CSDN通过智能技术生成

有三种不同的模式可以在您的应用中使用EF框架

Database First

Code First

ModelFirst

Db-First

在DbFirst时,你使用VS中的EDM向导或使用EF命令来从数据库生成context和实体。

a3373cdc4958d077e8be92e6113f2307.png

EF6广泛地支持 DbFirst,访问 EF6 DbFirst章节来学习如何使用EF6 DbFirst方法开发。

EF Core对这种方法仅提供有限的支持。

Code-First

当你的应用程序还没有数据库时,使用CodeFirst模式。在CodeFirst模式中,需要先写实体类(域类)和上下文类,然后EF使用迁移命令从这些类创建数据库。 遵守领域驱动设计(DDD)原则的开发者喜欢先编写域类,然后生成需要的数据库来存放数据。

e9cf4105c5bb2d94b35b94fa30118937.png

阅读 EF6 CodeFirst教程 章节来学习EF6 CodeFirst 开发。 阅读 EF Core 章节来学习 EF Core 中的CodeFirst开发。

Model-First

Model-First 模式中,先在VS的可视化设计器中创建实体、关系和继承层次,然后从视觉模型生成实体类、context类和数据库脚本。

e2ed4406d87af89f8842714ca1cb4a34.png

EF6包含这种模式的有限支持。

EF Core不支持这种模式。

选择您的应用程序开发方法

使用下面的流程图来决定在您的应用程序中正确的使用EF的方式:

bfbad53e26b0ab3e7467cba5f2956a0f.png

根据上面的图,如果你的应用程序中已经有一个域类,那你可以使用CodeFirst模式,因为你可以从现有类创建一个数据库。如果你有一个数据库,那么你可以使用Database-First模式创建一个EDM。如果你没有数据库和类,并且喜欢在可视化设计器中设计你的数据库模型,那么使用ModelFirst 模式。

VS配置EF环境

1.使用EF,创建Model (DataFirst)

在解决方案中,创建所使用的项目。例如:ASP网站项目、WinForm窗体项目……

在新建的项目中,添加 > 新建项 > 数据 > ADO.NET实体数据模型(.edmx)

在新建的.edmx中选择:从数据库生成(DatabaseFirst)

选择新建连接,填写连接数据库 > 填写登录数据库信息 > 选择或输入需要生成模型的数据库名称.

选择需要创建模型的表、视图、存储过程

点击下一步,直接生成(有些电脑可能会出现警告信息,忽视即可)。

2260649259.png

2.使用EF创建的内容

0.创建完成后,项目会默认引入两个命名空间:EntityFramework、System.Data.Entity

1. 最外层为.edmx文件,EF模型设计器,展示从数据库创建的模型,包括:表名、属性(表字段)、导航属性(外键、表与表之间的对应关系)、表与表之间1对1、1对多的关系。

2. Model1.Context.tt、Model.Designer.cs、Model.edmx.diagram、Model1.tt

1). Model1.Context.tt:包含Model1.Context.cs

Model1.Context.tt由T4模板生成,不可更改,Model1.Context.cs继承自DbContext,包括构造方法(继承自父类的构造方法,并在此传递配置文件的数据库连接字符串)、各个表所对应的Dbset类型的自动属性。

2). Model.Designer.cs:自动生成,无需更改

3) . Model.edmx.diagram:描述edmx文件的元素信息(名称、位置……)

4). Model1.tt:包含生成的Model.cs,自身由T4模板生成,无需修改

3.使用EF进行增删改查

查询

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 StudentMISEntities stu = new StudentMISEntities();

2 //IQueryable userInfoList=from u in stu.Users

3 var userInfoList = from u in stu.Users

4 where u.id == 10

5 select u;

6 foreach (var item in userInfoList)//EF延迟加载机制,数据用到的时候才去数据库中查询,不用的时候不去查询,提高程序性能

7 {

8 Response.Write(item.uName);

9 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

增加

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 Users userInfo = new Users();

2 userInfo.uName = "2333";

3 userInfo.uPassword = "123";

4 userInfo.uRole = "学生";

5

6 StudentMISEntities stu = new StudentMISEntities();//创建EF数据操作类实例

7 stu.Users.Add(userInfo);//把数据添加到EF,并添加标记

8 stu.SaveChanges();//把数据保存到数据库

48304ba5e6f9fe08f3fa1abda7d326ab.png

修改

48304ba5e6f9fe08f3fa1abda7d326ab.png

StudentMISEntities stu = new StudentMISEntities();

var userInfoList = from u in stu.Users

where u.id == 16

select u;

Users userInfo = userInfoList.FirstOrDefault();//返回第一个元素,如果没有的话,返回null

if (userInfo!=null)

{

userInfo.uPassword = "12345678";

stu.Entry(userInfo).State = System.Data.Entity.EntityState.Modified;//添加修改标记

stu.SaveChanges();

Response.Write(userInfo.uPassword);

}

else

{

Response.Write("要修改的数据不存在");

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

删除

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 StudentMISEntities stu = new StudentMISEntities();

2 var userInfoList = from u in stu.Users

3 where u.id == 17

4 select u; 5 Users userInfo = userInfoList.FirstOrDefault();//返回第一个元素,如果没有的话,返回null

6 if (userInfo!=null)

7 {

8 //stu.Users.Remove(userInfo);

9 stu.Entry(userInfo).State = System.Data.Entity.EntityState.Deleted;//添加删除标记

10 stu.SaveChanges();

11 Response.Write("已删除");

12 }

13 else

14 {

15 Response.Write("要删除的数据不存在");

16 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值