首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Entity Framework Core 2.0 新特性

(本文的英文原文地址:这里) 1.实体方面的新内容     1.1表拆分      现在可以将多个实体类型映射到将要共享主键列的同一个表,并且每一行将对应于两个或多个实体。    ...CLR类型,但是由于CLR类型不能被识别,所以必须从另一个实体类型导航到它。...包含定义导航的实体是所有者。当查询所有者时,默认情况下将包含所有类型。 按照惯例,将为所属类型创建一个影子主键,并通过使用表分割将其映射到与所有者相同的表。...显式编译的查询API已经在以前版本的EF和LINQ to SQL中可用,以允许应用程序缓存查询的翻译,以便它们只能被计算一次并执行多次。..., "a%"); select c; 值得注意的是,Like方法带有内存中的实现,当对内存中的数据进行查询时,或者在客户端需要发生相关的内存查询时,可以方便很多.

3.9K90

基于Entity Framework 6的框架Nido Framework

随着 Entity Framework 最新主版本 EF6 的推出,Microsoft 对象关系映射 (ORM) 工具达到了新的专业高度,与久负盛名的 .NET ORM 工具相比已不再是门外汉。...尽管 EF6 是在 ORM 基础上发展而来的,但是并没有改变它根本的工作方式。 如果您已经投入时间学习 EF,那么这种投入将不会白费。...该组包括的功能有通过重写视图生成引擎和查询编译修改来提高性能,由于 DbContext 能使用打开的连接而获得的稳定性,以及 Entity Framework 创建的 SQL Server 数据库的更改设置...正如我刚才提到的,EF6 的 EF API 是从 .NET Framework 中提取的;它们现已完全封装在 NuGet 程序包中。...您无需成为认证专家就能使用这些功能,但您在使用时肯定会感觉像专家,具体可以参考文章Entity Framework 6:专家版本。

1.7K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Entity Framework Core 2.0 新特性

    在以前的ef版本中,调用查询api时,可以通过自动编译并缓存编译的结果达到一次计算多次调用,有效的提高了ef的性能,显示编译查询(Explicitly compiled queries)这种机制可以绕过缓存查找的性能消耗...FromSql和ExecuteSqlCommand方法时加入参数化查询    在使用C#6.0的特性构建SQL语句并使用FromSql和ExecuteSqlCommand方法执行SQL语句时,会自动加入使用参数化查询...六.表拆分(Table splitting)   现在可以将两个或多个实体类型映射到同一表,其中主键列将被共享,每一行对应两个或多个实体。   ...但是由于它不能被CLR类型识别,所以必须从另一个实体类型导航到它。包含定义导航的实体是所有者。当查询所有者时,默认将包含所属的类型。   ...一旦注册了方法,您就可以在查询的任何地方使用它。  要注意的几件事: 按照惯例,在生成SQL时,该方法的名称用作函数的名称(在本例中是用户定义的函数),但可以在方法注册期间重写名称和schema。

    1.9K50

    Entity Framework Core 简介

    EF Core 需要和 .NET Core 应用程序一起使用,并且需要 .NET 4.5+ 版本。...在 Code First 方法中, EF Core API 使用基于 domain classes 中提供的约定和配置的迁移来创建数据库和表,这种方法在 DDD 中很有用。...如果你习惯于 Database First ,那么你可以使用 EF Core 命令基于现有的数据库创建 domain classes 和上下文类,但是这种方法支持有限,因为 EF Core 2+ 版本...一、EF Core 与 EF6 这里列一下 EF Core 目前所具有的 EF6 的功能 DbContext ; DbSet ; Data Model ; 使用Linq-to-Entities查询 ;...以下是 EF Core 目前所不具有的 EF6 的功能 EDMX /模型的图形可视化 ; 实体数据模型向导 ; ObjectContext API ; 使用Entity SQL查询 ; 自动迁移 ; TPT

    1.9K10

    盘点 .NET 比较流行的开源的ORM框架

    支持 Join 查询、Union all 、Subquery 支持配置查询 支持 DbFirst 从数据库导入实体类,或使用生成工具。...初期开发过程中吸取了NBear与MySoft的一些精华并加入新思想,之后参考EF Lambda语法进行大量扩展。 经过数十个版本的更新迭代发布全新v2.0版本,支持动态列/表、分库/分表等。...EF提供变更跟踪、唯一性约束、惰性加载、查询事物等。 开发人员使用Linq语言,对数据库操作如同操作object对象一样省事。 EF有三种使用场景: 1、从数据库生成Class。...没有更改跟踪,因此您必须自己进行管理,但从积极的方面来说,您可以获得更多控制权并更快地访问您的数据。 换句话说LINQ to DB 是类型安全的 SQL。...通过使用 DynamicMethod 生成消除 Linq 和快速属性分配来获得出色的性能。 查询语言是好的 ole SQL。 包括一个低摩擦的 SQL 构建器类,使编写内联 SQL变得更加容易。

    4.2K42

    千万级MySQL数据库建立索引,提高性能的秘诀

    若多个物理记录对应同一个索引,若同时访问,也会出现锁冲突; 当表有多个索引时,不同事务可以用不同的索引锁住不同的行,另外innodb会同时用行锁对数据记录(聚簇索引)加锁。...3)不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。   ...因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。...num from a where exists(select 1 from b where num=a.num) 并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时...与临时表一样,游标并不是不可使用。对小型数据集使用 FAST_FORWARD 游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。

    3.8K10

    PostgreSQL 13.0-13.15 功能更新和bug fixed列表

    PG13.6 移除在逻辑复制连接上发出的SQL命令的词法限制,walsender进程将对包含未引用分号、包含奇数个单引号或双引号的dollar引用文字,或者当SQL命令以注释开头时失败。...PG13.9 在备机升级后避免WAL数据损坏,当一个执行归档恢复但不使用备用模式的PostgreSQL实例被升级时,如果它试图读取的最后一个WAL段以部分记录结尾,实例会在新时间轴上写入一个无效的WAL...PG13.9 修复将read-write扩展数据传递给SQL函数时的使用后释放风险,如果一个非内联的SQL函数在多个地方使用参数,并且其中一个函数希望能够就地修改read-write数据,那么稍后对参数的使用将观察到错误的值...当pg_dump转储一个标记为REPLICA_IDENTITY的分区索引时,它生成的命令序列会在将分区索引标记为有效之前就应用REPLICA_IDENTITY,导致恢复失败。...PG13.15 在重新索引时访问索引抛出错误,以前这只是一个断言检查,但现在已升级为常规运行时错误。当重新索引一个试图访问其自身表的用户定义索引表达式时,这将提供更准确的错误消息。

    14010

    .NET面试题系列 - LINQ:性能

    例如你判断一个集合是否有成员时,请使用Any而不是Count==0。因为如果该集合有极多成员时,Count遍历是非常消耗时间的。 ?...在代码中,选择了前100个score(一条SQL),然后对所有score进行遍历,从表Student中获得Name的值(100条SQL)。 解决方法也在文章中给出了,就是将两个表连到一起。...只获得你需要的列(使用ViewModel或者改进你的查询)和行(使用IQueryable) 尽可能使用一条查询而不是多条 只为了展示数据,而不进行后续修改时,可以使用AsNoTracking。...在EF6中,我们还可以使用这样的方法: ? 注意:编译器不一定能够将你的LINQ语句翻译为SQL,例如字符串的IndexOf方法就不被支持。...使用LinqOptimizer来优化LINQ语句。 使用Reshaper等工具,它可能会在你写出较差的代码时给出提醒。 上MSDN,nuget查询是否已经有了现成的方法(例如获得最后一个元素)。

    2.6K40

    MYSQL 优化常用方法

    2、使用连接(JOIN)来代替子查询(Sub-Queries) MySQL从4.1开始支持SQL的子查询。...WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo ) 使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死...3、使用联合(UNION)来代替手动创建的临时表 MySQL 从 4.0 的版本开始支持 UNION 查询,它可以把需要使用临时表的两条或更多的 SELECT 查询合并的一个查询中。...INSERT INTO salesinfo SET CustomerID=14; UPDATE inventory SET Quantity=11 WHERE item='book'; COMMIT; 事务的另一个重要作用是当多个用户同时使用相同的数据源时...5、锁定表 尽管事务是维护数据库完整性的一个非常好的方法,但却因为它的独占性,有时会影响数据库的性能,尤其是在很大的应用系统中。

    91780

    MS SQL Server事务与并发知多少

    当试图修改数据时,事务会为所依赖的数据资源请求排它锁,一旦授予,事务将一直持有排它锁,直至事务完成。在事务执行过程中,其他事务就不能再获得该资源的任何类型的锁。   ...当试图读取数据时,事务默认会为所依赖的数据资源请求共享锁,读操作一完成,就立即释放共享锁。在事务执行过程中,其他事务仍然能够获得该资源的共享锁。...在SNAPSHOPT(快照)隔离级别下,当读取数据时,可以保证读操作读取的行是事务开始时**可用的最后提交的**版本。   ...这是因为快照清理线程每隔一分钟运行一次,现在由于没有事务需要为价格=20.00的那个行版本了,所以清理线程下一次运行时会将这个行版本从tempdb数据库中删除掉。   ...这样一来,它就跟SQL Server默认的READ COMMITED级别非常类似了,只不过读操作不用获得共享锁,当请求的资源被其他事务的排它锁锁定时,也不用等待。

    2.3K11

    MySQL8.0.30 release note 中文翻译(详细版)

    在所有情况下,XA事务的状态都是从最后写入的二进制日志文件中提取的,并与从存储引擎获得的事务状态同步。 当同一事务的XID被用来连续执行XA事务时,这个版本的一个已知问题可能会遇到。...当一个表的定义在源表和复制表之间出现分歧时,因为复制表有一个额外的主键,如果该表的索引在源表和复制表上都存在,则复制表的更新和删除会失败。...当使用基于行的复制时,复制有时会覆盖由源发送的SQL模式值,以试图避免与从属上的额外列的问题。在极端情况下,这可能导致数据分歧。这个问题已经得到纠正,现在复制体尽可能保留源的SQL模式。...当一个成员试图重新加入一个组复制拓扑结构时,当同一服务器的旧版本仍然存在时,所记录的信息已经从信息说明升级为警告信息。(BUG #32651024) 复制。...(Bug #33754993) 当使用递归公共表表达式(CTE)执行查询时,在常量谓词消除后删除查询表达式,预计当CTE临时表的表对象的引用计数为零时,应该可以再次重新创建表,但在某些情况下,其中一个表的引用没有被正确记录为附属于

    2K10

    Java面试——数据库

    ⑤、不支持TEXT、BLOB 字段,当有些查询需要使用临时表时(因为是存在于内存中,所以这种类型常应用于临时表中),如果表中有TEXT、BLOB 字段,那么会转换为基于磁盘的 MyISAM 表,严重降低性能...实现就是,这个数据所有请求都有资格去修改,但会获得一个该数据的版本号,只有版本号符合的才能更新成功,否则返回失败。这样的话,我们就不需要考虑队列的问题,不过,它会增大 CPU 的计算开销。...方便日后的维护和使用。common 字段可以添加说明。 【5】表名的长度也是有限制的 Oracle 中比较容易遇到这个问题,因为它的长度时30字节,MySQL的长度限制时64字节。...--特别是使用电池供电缓存(Battery backed up cache)时。 --设成2对于很多运用,特别是从MyISAM表转过来的是可以的,它的意思是不写入硬盘而是写入系统缓存。...当进行太多这样操作时,备库将被拉开差距。如果将查询转移到一个备库上也许会有帮组。在备库上创建一个特别保留的数据库,用于避免和从主库上复制的数据产生冲突。

    59741

    EFCore批量操作,你真的清楚吗

    现在EFCore支持开箱即用确实很棒,可以提高应用程序的性能和速度。 1 对比实践 以常见的批量插入为例,使用SQL Server Profiler观察产生并执行的SQL语句。...SaveChanges(), 从SQL Profiler追溯到的SQL: exec sp_executesql N'SET NOCOUNT ON;INSERT INTO [Categories] ([CategoryID...,而是被组合为一个传参存储过程脚本(用列值作为参数);如果使用EF6执行相同的代码,则在SQL Server Profiler中将看到3个独立的插入语句 。...下面是EFCore、EF6批量插入的对比截图: ? ?...① 就性能和速度而言,EFCore批量插入更具优势 ② 若数据库是针对云部署,EF6运行这些查询,还将产生额外的流量成本 经过验证:EFCore批量更新、批量删除功能,EFCore均发出了使用sp_executesql

    3.5K10

    MySql数据库优化细节

    因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。...例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了。...使用连接(JOIN)来代替子查询(Sub-Queries)(出处) MySQL 从4.1开始支持 SQL 的子查询。...使用联合(UNION)来代替手动创建的临时表(出处) MySQL 从 4.0 的版本开始支持 UNION查询,它可以把需要使用临时表的两条或更多的 SELECT查询合并的一个查询中。...INSERT INTO salesinfo SET CustomerID=14; UPDATE inventory SET Quantity=11 WHERE item='book'; COMMIT; 事务的另一个重要作用是当多个用户同时使用相同的数据源时

    1.4K20

    EntityFramework快速上手

    EF有三种使用场景: 从数据库生成Class, 由实体类生成数据库表结构, 通过数据库可视化设计器设计数据库,同时生成实体类。 O/RM是什么?...ORM 是将数据存储从域对象自动映射到关系型数据库的工具。ORM主要包括3个部分:域对象、关系数据库对象、映射关系。ORM使类提供自动化CRUD,使开发人员从数据库API和SQL中解放出来。...它返回在概念模型中定义的实体。 Entity SQL: Entity SQL 是另一种炉类似于L2E的言语,但相给L2E要复杂的多,所以开发人员不得不单独学习它。...Entity Client Data Provider:主要职责是将L2E或Entity Sql转换成数据库可以识别的Sql查询语句,它使用Ado .net通信向数据库发送数据可获取数据。.../4.5,而EF6是独立的EntityFramework.dll,不依赖 .net Framework。

    1.9K50

    「mysql优化专题」视图应用竟然还可以这么优化?不得不收藏(8)

    视图是基于 SQL 语句的结果集的可视化的表。 视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。...(3)视图的缺点: 1)性能差: 把视图查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,sql server也要把它变成一个复杂的结合体,需要花费一定的时间...2)修改限制: 当用户试图修改试图的某些信息时,数据库必须把它转化为对基本表的某些信息的修改,对于简单的试图来说,这是很方便的,但是,对于比较复杂的试图,可能是不可修改的。...); 4)物化视图: 它主要用于数据库的容灾(备份),实体化的视图可存储和查询,通过DBLink连接在主数据库物化视图中复制,当主库异常备库接管实现容灾; 二、视图的使用: 1、创建视图 create...因为,使用视图更新数据时,如果没有全面考虑在视图中更新数据的限制,就可能会造成数据更新失败。

    64930

    架构面试题汇总:mysql全解析(六)

    当InnoDB需要将一个数据页写入磁盘时,它首先将该页的一个副本写入双写缓冲区,然后再写入其实际位置。如果在写入实际位置之前发生了系统崩溃,InnoDB可以在重启时从双写缓冲区恢复数据页。...提高查询性能:索引通常比完整的数据表小得多,且存储在内存中,因此访问速度更快。 避免锁竞争:当多个事务同时访问同一数据时,使用覆盖索引可以减少对数据表的锁定需求,从而降低锁竞争的可能性。...最左前缀原则是指在使用联合索引时,查询条件必须从索引的最左边开始,并且不能跳过索引中的任何列。...这意味着,当一个事务正在修改数据时,其他事务仍然可以访问原始数据(或之前的数据版本)。每个事务在开始时都会获得一个唯一的事务ID,并且只能看到自己开始之前已经提交的事务所做的修改。...但在新版本中,通常建议避免使用这种行格式,因为它会浪费存储空间并降低性能。 在选择行格式时,还需要考虑其他因素,如索引的类型和大小、查询的复杂性以及系统的整体性能需求等。

    18210

    Java面试集锦(一)之数据库(mysql)

    一般来说,如果需要事务支持,并且有较高的并发读取频率(MyISAM的表锁的粒度太大,所以当该表写并发量较高时,要等待的查询就会很多了),InnoDB是不错的选择。...SQL 优化: 尽量避免使用 SELECT *; 只查询一条记录时使用 limit 1; 使用连接查询代替子查询; 尽量使用一些能通过索引查询的关键字。...版本号机制 一般是在数据表中加上一个数据版本号version字段,表示数据被修改的次数,当数据被修改时,version值会加一。...操作员 B 完成了操作,也将版本号加一( version=2 )试图向数据库提交数据( balance=80 ),但此时比对数据库记录版本时发现,操作员 B 提交的数据版本号为 2 ,数据库记录当前版本也为...3 只能保证一个共享变量的原子操作 CAS 只对单个共享变量有效,当操作涉及跨多个共享变量时 CAS 无效。

    32020

    SQL命令 REVOKE

    可以使用REVOKE命令从现有用户撤销不存在的角色。 但是,角色名必须使用与授予角色时相同的字母大小写来指定。...CASCADE撤销所有这些关联的特权。 当检测到关联的特权时,RESTRICT(默认值)导致REVOKE失败。...对缓存查询的影响 当撤销特权或角色时, IRIS将更新系统上所有缓存的查询,以反映特权中的这一更改。...但是,当无法访问某个名称空间时——例如,当连接到数据库服务器的ECP连接关闭时——REVOKE会成功完成,但不会对该名称空间中的缓存查询执行任何操作。...示例 下面的嵌入式SQL示例创建两个用户,创建一个角色,并将角色分配给用户。 然后,它使用星号(*)语法从所有用户撤销该角色。

    1.2K50

    2020数据库面试题

    我们把识别度最高的字段放到最前面 在创建多列索引时,我们根据业务需求,where子句中使用最频繁的一列放在最左边,因为MySQL索引查询会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配...当mysql分析全表扫描比使用索引快的时候不使用索引. 当使用联合索引,前面一个条件为范围查询,后面的即使符合最左前缀原则,也无法使用索引. 事务 1. 什么是事务?...MVCC 的实现原理 它的实现原理主要是依赖记录中的 3个隐式字段,undo日志 ,Read View 来实现的。 在每一行数据中额外保存两个隐藏的列:当前行创建时的版本号和删除时的版本号。...mysql不使用hash表做索引是因为,hash表可以快速定位数据,但是不支持范围查询 完全平衡二叉树,可能比较慢,可以支持范围查询 索引需要作为文件存储起来,B+ 树的磁盘IO较少 一个节点存储多少个元素...keying为了解决Phantom Problem幻读问题 当查询的索引含有唯一属性时,将next-key lock降级为record key Gap锁设计的目的是为了阻止多个事务将记录插入到同一范围内

    74730
    领券