2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

Entity Framework 7 – 新的平台与数据存储系统

  • 2015-05-03
  • 本文字数:1092 字

    阅读完需:约 4 分钟

创建 Entity Framework 的本意是为了在完整版本的.NET 中操作关系型数据,而在 EF 7 中,以上两点假设都不再成立。

Entity Framework 7 的平台目标包括

  • 完整的.NET Framework
  • ASP.NET 5
  • Windows 10 通用应用平台 UAP
  • Mac
  • Linux

而在提供者方面,EF 7 的目标包括

  • 关系型数据库提供者:SQL Server、SQLite 和 Postgres
  • Azure Table Storage
  • Redis
  • 内存数据库提供者(用于测试目的)

EF 7 的顶层体验与 EF 6 是相同的,你仍然要与 DbContext、DbSet 等对象打交道。但内部的核心代码都进行了重写,这意味着元数据、变更跟踪和查询管道等部分都完全不同了,但对于多数应用场景来说,开发者是不会注意到这些变化的。

核心的变化是出于一系列原因的考虑,其中一个原因在于现有的架构非常难以改动,即使一些很基础的需求,例如加入一个日志框架作为插件都显得异常艰难。经过重写核心代码之后,那些令人困惑的 API 和行为都被彻底删除了。

EF 在内存占用和速度上一直为人所诟病,而这次重写的一个重点就是应对这些问题。这一改动的重要性体现在非常广泛的平台上,小型的移动设备的电池寿命非常有限,而多种云服务器则会按照 CPU 的使用率进行收费。

日志记录

Entity Framework 中的日志记录功能是源于 Microsoft.Owin.Logging 命名空间中的 ILogger 接口的实现。微软希望这个接口能够成为让所有的.NET 日志记录框架都支持的标准接口。

SQL 生成方面的改进

在 EF 7 中,新增与修改操作会得到小幅度的改善。举例来说,如果你打算对某张表中的四个产品应用某种折扣,在使用 EF 6 时,会产生共 1+N 次数据库访问:一次访问用于加载数据,然后对每一行都要进行一次访问。而在 EF 7 中,保存操作将成为批量操作,因此只需对数据库进行两次访问。

比起使用原生 SQL 的一次访问来说,这种方式依然较慢,但这种方式的优点在于能够用于非关系型数据库。

混合 SQL 与 LINQ

EF 7 支持在 LINQ 表达式中使用 FromSql 方法混合 SQL 语句,这样你就能够访问某些 EF 通常无法使用的对象,例如表值函数或是应用了索引提示的表。

context.FromSql(“SELECT * FROM Customer (WITH (IX_Index)”).OrderBy(c => c.Name)

这种方式能够生成正确的 SQL,对数据库执行 order by 和 where 语句。

EF 与移动设备

正如上文所说,EF 7 的目标之一是不限于仅仅使用在桌面应用中。其中的一个用例是离线的移动设备,其目标是你可以在移动设备上使用相同的代码以操作本地缓存及数据,然后将这些数据应用到服务器上。

要了解 Entity Framework 7 的更多信息,请观看 Channel 9 的视频“ Entity Framework 7: Data for Web, Phone, Store, and Desktop ”。

查看英文原文: Entity Framework 7: New Platforms and New Data Stores

2015-05-03 05:314634
用户头像

发布了 428 篇内容, 共 189.6 次阅读, 收获喜欢 39 次。

关注

评论

发布
暂无评论
发现更多内容

云上MongoDB常见索引问题及最优索引规则大全

MongoDB中文社区

mongodb

焱融看|AI 如何驱动存储发展

焱融科技

云计算 AI 分布式 高性能 文件存储

从分层架构到微服务架构(五)之服务化架构

元闰子

架构 从分层架构到微服务架构

MariaDB 的自增字段 AUTO_INCREMENT 字段

HoneyMoose

基于 HTML+CSS+JS 的纸牌记忆游戏

海拥(haiyong.site)

html 游戏 4月月更

关于数据湖几个问题详细剖析

五分钟学大数据

数据湖 4月月更

我真不信,这年头还有人能懂SpringBoot的ClassLoader加载机制

Java工程师

Java spring 程序员 科技

在线XML转JSON工具

入门小站

工具

订单管理系统(OMS)搭建实战 - 低代码拖拽定制订单管理系统

蒋川

低代码 低代码开发 低代码平台 订单系统 订单管理系统

linux之ssh命令

入门小站

Linux

怒肝 JavaScript 数据结构 — 栈篇(二)

杨成功

数据结构 4月月更

Java 在 IntelliJ IDEA 中提示 set the language level 9

HoneyMoose

Hoo虎符研究院|一图了解币圈后浪Magic Eden

区块链前沿News

虎符研究院

[Day9]-[动态规划]编辑距离

方勇(gopher)

LeetCode 动态规划 数据结构算法

架构师作业2

小虾米

架构师实战营

设置 Jupyter Notebook 主题

信号量

Python Jupyter Notebook notebook 主题 科学计算

自己动手写Docker系列 -- 5.3实现logs命令查看容器日志

golang Docker

微信朋友圈的高性能复杂度

哈喽

「架构实战营」

互联网的下一站,大概率是能源

脑极体

Spring定义BeanDefinition

IT巅峰技术

前端食堂技术周刊第 32 期:2022 年 3 月 TC39 会议、Rome Formatter、Node 内置 Test Runner

童欧巴

JavaScript 程序员 前端 web前端

哈希值游戏DAPP开发|区块链哈希值竞猜游戏开发

薇電13242772558

区块链 哈希值

Redis集群架构剖析(5):复制与故障转移

非晓为骁

主从复制 redis cluster master

Tomcat:应用加载原理分析

IT巅峰技术

Tomccat

Linux驱动开发-编写NEC红外线协议解码驱动

DS小龙哥

4月月更

Apache flink - PartitionNotFoundException

李印

flink 消费 kafak 错误排查

Java 初始化 List 的几种方法

HoneyMoose

C++后端开发进阶学习大纲指南

赖猫

c++

Go 实现 WebSockets:1.什么是 WebSockets

宇宙之一粟

Go 4月月更

传统链游的革新,PlatoFarm用实际行动回馈Dao社区

BlockChain先知

C++11 智能指针之shared_ptr<void>

轻口味

c++ android 4月月更

Entity Framework 7 – 新的平台与数据存储系统_.NET_Jonathan Allen_InfoQ精选文章