当前位置:   article > 正文

C#中EF框架应用配置_c# ef

c# ef

一、什么是EF框架ORM框架 ?

     EF 全称是 EntityFramework 。Entity Framework是ADO.NET 中的一套支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架。

    ORM框架(Object Relational Mapping) 翻译过来就是对象关系映射。

二、EF实体框架整体架构:

架构组件:

EDM(实体数据模型): EDM由三个主要部分组成 - 概念模型,映射和存储模型。

Conceptual Model:概念模型包含模型类及其关系。这将独立于您的数据库表设计。

Storage Model:存储模型是包括表,视图,存储过程及其关系和密钥的数据库设计模型。

Mapping:映射由有关概念模型如何映射到存储模型的信息组成。

LINQ to Entities: LINQ to Entities是一种用于针对对象模型编写查询的查询语言。它返回在概念模型中定义的实体。你可以在这里使用你的LINQ技能。

Entity SQL:实体SQL是另一种查询语言(仅适用于EF 6),就像LINQ to Entities一样。然而,这比L2E稍微难一些,开发者需要单独学习。

ObjectServices:对象服务是访问数据库中的数据并将其返回的主要入口点。对象服务负责实现,这是将从实体客户端数据提供者(下一层)返回的数据转换为实体对象结构的过程。

Entity Client Data Provider:此层的主要职责是将LINQ-to-Entities或实体SQL查询转换为底层数据库可以理解的SQL查询。它与ADO.Net数据提供者通信,而ADO.Net数据提供者又从数据库发送或检索数据。

ADO.Net Data Provider:该层使用标准的ADO.Net与数据库进行通信。

三 、EF 的优势(与 ADO.NET 的对比)

https://www.cnblogs.com/best/p/7714500.html (ADO详解链接)

如果不用ORM框架,我们一般这样来使用ADO.NET进行数据库开发:

1.将ADO.NET对数据库的操作封装到一个类里SqlHelper中

2.在DAL层调用SqlHelper

3.其他层再调用DAL进行数据库操作

相对的优点

1.【逻辑】业务逻辑和数据存取逻辑分离开来;

2.【新增操作】 EF:一次连接,执行多条sql;SqlHelper里使用一般写法,连接又无法释放,用using,会造成多次连接重置;

3.【更新操作】 EF自动优化,只update set 有变化的字段,EF也可以很方便地只更新 实体的指定属性,产生的sql语句里的set后的字段会更少;

4.【智能提示】 用linq, lamda表达式 有智能提示,写错了编译不过;写sql语句字符串,调sqlhelper,sql语句写错一样编译通过;

5.【安全】 省去了防止sql注入的麻烦;

6.【数据库变更】使用EF,切换较方便;

7.【效率】 使用EF要比使用Ado.net开发效率高;

8.【可读性】 代码的可读性更高.

四、EF框架的三种模式

Database First(数据库优先)

      如果已经拥有数据库,Visual Studio中内置的Entity Framework设计器可以自动生成一个数据模型,该模型由对应于现有数据库对象(如表和列)的类和属性组成。有关数据库结构,数据模型及映射之间的信息以XML格式存储在.edmx文件中。实体框架设计器提供了一个可视化界面,您可以使用它来显示和编辑.edmx文件。

Model First(模型优先)

      如果您还没有数据库,则可以使用Visual Studio中的Entity Framework设计器在.edmx文件中创建一个模型。当模型建完后,可以执行.edmx文件来创建数据库。

Code First(代码优先)

      无论您是否拥有数据库,都可以使用Code First。如果没有数据库,可以编写类和对应于表和列的属性。如果有数据库,那么Entity Framework可以生成与现有表和列对应的类和属性。如果使用Code First创建数据库,则可以使用“migration(迁移)”来将数据库部署到生产环境。当数据模型更改时,可以将更改部署到生产环境中,而不改变原有的数据 如何选择? 我们已经了解了代码优先,模型优先和数据库优先的方法。所以,在我们的应用程序中使用哪种开发方法。下图说明了决策树

     

 如果您已经有一个现有的具有域类的应用程序,那么您可以使用代码优先的方法,因为您可以使用此方法从现有类创建数据库。如果您有现有数据库,则可以使用数据库优先方法从现有数据库创建EDM。如果您没有现有的数据库或域类,并且您更愿意在可视化设计器上设计数据库模型,那么请选择“模型优先”方法。 Database First是EF最早支持也是最容易上手的一种开发模式,可以复用数据库;Model First是最能体现面向对象思想的一种模式,而且也很容易;Code First 即是编写代码,这种模式适合于资深的程序员,而且只需要编写代码实体类自动生成方便快速,更易维护,但是对于手动创建,对于太多的实体的时候则不方便,工作较多。所以我们在选择使用EF的三种模式时,根据我们自己的实际需求,选择最适合自己的,对自己的工作效率最有益的。

EF官方文档学习:https://docs.microsoft.com/zh-cn/ef/

 五、实例操作: Database First(数据库优先)

1.1创建一个示例数据库。

1.2打开vs2017,新建项目,如图所示

1.3添加EF框架插件

1.4添加ADO实体数据模型

1.5选择模型类型,点击下一步,然后新建连接,填写连接参数。

注意:服务器是本地的服务器,不是mysql服务器名字。Database name 是刚才新建的数据库名字。

1.6连接字符串选项

注意:此时点击下一步,会有选择实体框架的选项,选择最高的6.x。

如果报错,查看错误解决办法。

1.7选择要操作的数据表

1.8实体模型结果显示

1.9 写测试代码。向StudentInfo表中添加一条记录,代码如下

  1. namespace Database_First
  2. {
  3.     class Program
  4.     {
  5.         static void Main(string[] args)
  6.         {
  7.             //创建数据库访问网关
  8.           using (dbexamEntities1  examentity = new dbexamEntities1 ())
  9.             {
  10.                 //创建StudentInfo一个实体
  11.                 t_studentinfo student = new t_studentinfo();
  12.                 student.StudentNo = "110";
  13.                 student.StudentName = "李寻欢";
  14.                 student.Sex = "男";
  15.                 student.Grade = "大学一年级";
  16.                 student.Age = "21";
  17.                 //将创建的实体,放入网关的数据实体的集合
  18.                 examentity.t_studentinfo.Add(student);
  19.                 //写回数据库
  20.                examentity.SaveChanges();
  21.             }
  22.             Console.WriteLine("OK");
  23.         }
  24.     }
  25. }

2.0 运行程序之后,在数据库中查看是否插入成功,如下图所示,成功插入数据

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/666125
推荐阅读
相关标签
  

闽ICP备14008679号