报名参加CloudWeGo黑客松,奖金直推双丰收! 了解详情
写点什么

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:314537
用户头像

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

关注

评论

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

API对接之模板方法

Rubble

4月日更 4月月更

建木持续集成平台v2.3.0发布

Jianmu

持续集成 工作流 gitops pipeline 建木CI

Docker 实战教程之从入门到提高 (七)

汪子熙

Docker 容器 docker image 容器镜像 4月月更

Nocalhost - 让云原生时代的开发更高效

沃趣科技

云原生 Nocalhost 应用开发

web前端培训javaScript的内存管理机制分享

@零度

JavaScript 前端开发

关于数字货币的几点问题及回应

CECBC

upnp.exe进程

Sher10ck

日积月累

一文读懂在OpenHarmony轻量设备开发应用

OpenHarmony开发者

OpenHarmony OpenHarmony应用开发 轻量设备

MySQL 无法满足查询性能?北明天时选择 TDengine 实现热网监控和能源分析

TDengine

数据库 tdengine 开源 时序数据库

Spring入门基础

乌龟哥哥

4月月更

预售2小时,破10000册!顶级投资人的投资策略首度全面公开

博文视点Broadview

2021最新Spring Boot 面试题

爱好编程进阶

Java 面试 后端开发

[Day19]-[动态规划]分割等和子集

方勇(gopher)

LeetCode 动态规划 数据结构和算法

读《Software Engineering at Google》(08)

术子米德

架构师成长笔记

高效压缩位图在推荐系统中的应用

vivo互联网技术

redis 推荐 存储

基于云效Codeup一键恢复删库保护数据资源,程序员删库跑路不复存在

阿里云云效

云计算 阿里云 程序员 代码安全 删库保护

什么是知识库管理系统?如何搭建企业知识库系统?

小炮

企业知识管理 企业知识管理工具 知识管理系统

区块链如何助推著原创保护

CECBC

读《Software Engineering at Google》(09)

术子米德

架构师成长笔记

spring-cloud-kubernetes的服务发现和轮询实战(含熔断)

程序员欣宸

java 4月月更

TASKCTL C/S客户端两种不同的登陆模式

敏捷调度TASKCTL

分布式 ETL 批量操作 自动化运维 调度任务

不同阶段的人,如何学习Rust?加入非凸,一起学习!

非凸科技

rust 招聘 编程语言‘

打破虚拟边界的视频交互新方式,AR隔空书写的应用理念和探索实践

阿里云CloudImagine

音视频 AR 直播 视频云

一文论述元宇宙、NFT及不可回避的Web3 时代

CECBC

Linux驱动开发-外部中断的注册使用(按键为例)

DS小龙哥

4月月更

老旧项目二次开发指南

阿毛

重构 项目架构 二次开发

java培训JVM内存模型和GC机制的解析

@零度

Java JVM GC

大数据培训Hive面试核心知识点分享

@零度

大数据 hive

读《Software Engineering at Google》(10)

术子米德

架构师成长笔记

Go 入门很简单:Writer和Reader接口

宇宙之一粟

接口 Go 语言 4月月更

TASKCTL 作业异常报错如何发送短信和邮件

敏捷调度TASKCTL

开源 DevOps 分布式 方法论 敏捷开发

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