Entity Framework映射创建过程

29 篇文章 1 订阅

概念

ADO.NET Entity Framework
      是微软以ADO.NET为基础所发展出来的对象关系对应(O/R Mapping)解决方案;是ADO.NET中的一组支持开发面向数据的软件应用程序技术,是微软的一个ORM框架
ORM
      广义上:ORM指的是面向对象的对象模型(实体)和关系型数据库的数据结构(数据库表)之间的相互转换
      侠义上:ORM可被认为是,基于关系型数据库的数据存储,实现一个虚拟的面向对象的数据访问接口。理想情况下,基于这样一个面向对象的接口,持久化一个OO对象应用不需要里哦阿姐任何关系型数据库存储数据的实现细节


创建过程

一:创建步骤
      前提:使用NuGet下载 EntityFramework和EntityFramework.zh-Hans和MySql.Data.Entity这三个插件

1. 新建实体数据模型
2. 选择模型内容
3. 选择要连接的数据库
4. 选择版本 5. 选择模型中包括的数据库对象
6. 最后会弹框,要选择点击确定,否则无法生成的表.cs
此时 .edmx已成功生成

遇到的问题

1. 主键为空
      解决办法:运行mysql服务,进入mysql数据库,执行如下命令
mysql> use student
Database changed
mysql> set global optimizer_switch='derived_merge=OFF';
Query OK, 0 rows affected (0.00 sec)

      关闭vs,重启重新操作创建步骤即可
      原因:mysql 5.1中开始引入optimizer_switch, 控制mysql优化器行为。他有一些结果集,通过on和off控制开启和关闭优化器行为,对参数的说明可参考官方文档
2. 插件版本过高

      解决办法:使用NuGet对 EntityFramework和EntityFramework.zh-Hans进行卸载高版本,下载低版本


edmx文件详解

      新建之后.edmx是以实体设计器方式打开的,但是我们可以找到.edmx文件,也可用文本编辑器打开,文件内容如下:

      从代码看来,.edmx就是个xml文件,该文件就是用来解析存储模型、概念模型以及两者之间的映射


EF的优点

  • 不再需要关心应用程序是如何连接数据库的
  • 简介的linq语句大大提高了开发人员的效率,不用再写复杂的sql语句了
  • .不再管应用程序如何去连接数据库,直接对类实体对象操作;

EF的缺点

  • 由于linq语句编译之后就是sql,对于这种自动生成的sql语句无法控制
  • EF的运行机制会消耗大量内存,大大降低了程序运行效率,从而导致降低了用户在客户端的体验效果
  • 一旦数据结构发生变化,需要更新EF数据model;有时还可能会出现找不到更新过的实体类这种情况

EF的实质

      在EF的实体数据模型由以下三种模型和具体相应的文件扩展名的映射文件进行定义的

  • 定义存储模型:存储架构定义语言文件.ssdl
  • 定义概念模型:概念架构定义语言文件.csdl
  • 定义存储过程与概念模型之间的映射:映射规范语言文件.msl

      实体框架 使用这些基于XML的模型和映射文件将对概念模型中的实体和关系的创建,读取,更新和删除操作转换为对数据源中的等效操作


【Linq与sql区别】

  • LINQ,语言集成查询(Language INtegrated Query)是一组用于c#和Visual Basic语言的扩展。它允许编写C#或者Visual Basic
  • linq是面向对象的sql。也就是说,sql是向关系型数据库的查询,而linq实际上是对内存里的数据的查询,最终会通过表达式分析与实体到关系的映射(linq to sql),把linq转换为sql语句
  • linq to sql是一种ORM组件,O/RM 允许你使用 .NET 的类来对关系数据库进行建模。即是一个数据库到对象结构的一个中间层, 他把对关系数据的管理转变为对象的操作,屏蔽了麻烦的sql;对数据的增删改查提供了简单的实现方式

参考文章:sql 、linq、lambda 查询语句的区别


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Entity Framework是微软开发的一种对象关系映射(ORM)框架,用于在.NET应用程序中与数据库进行交互。它提供了一种简化和自动化数据库操作的方式,使开发人员能够使用面向对象的方式来处理数据库。 在上述引用中,是一个示例代码,展示了如何创建一个继承自DbContext的自定义数据库上下文类MyDBContext,并定义了一个DbSet属性Persons,用于表示数据库中的Person表。此外,还重写了OnModelCreating方法,用于配置数据库模型。 是关于Entity Framework的一些开发团队的建议。他们强烈建议使用using语句来确保DbContext实例的正确释放,以避免潜在的资源泄漏问题。同时,他们指出,仅仅为了利用延迟加载而不使用using语句是违反分层原则的。 以下是一个简单的示例,演示了如何使用Entity Framework进行数据库操作: ```csharp using (var context = new MyDBContext()) { // 查询所有的Person记录 var persons = context.Persons.ToList(); // 添加新的Person记录 var newPerson = new Person { Name = "John", Age = 25 }; context.Persons.Add(newPerson); context.SaveChanges(); // 更新Person记录 var personToUpdate = context.Persons.FirstOrDefault(p => p.Name == "John"); if (personToUpdate != null) { personToUpdate.Age = 30; context.SaveChanges(); } // 删除Person记录 var personToDelete = context.Persons.FirstOrDefault(p => p.Name == "John"); if (personToDelete != null) { context.Persons.Remove(personToDelete); context.SaveChanges(); } } ``` 这个示例展示了如何使用Entity Framework的DbContext类来查询、添加、更新和删除数据库中的Person记录。使用using语句确保DbContext实例在使用完毕后被正确释放。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值