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

Entity Framework Core 2.0 新特性

使用所属类型与EF6中使用复杂类型类似,(PS:这里解释一下EF6中的复杂类型,复杂类型是允许在实体中组织标量属性的实体类型的非标量属性。像实体一样,复杂类型由标量属性或其他复杂类型属性组成。)...此功能允许在元数据模型(一般在OnModelCreating)中直接在实体类型上定义LINQ查询条件(通常传递给LINQ Where查询运算符的布尔表达式)。...2.性能提升方面 2.1DbContext连接池 在ASP.NET Core程序中我们使用EF Core一般都是将自定义DbContext类型注册到依赖注入系统中,然后通过控制器中的构造函数参数获取该类型的实例...>( options => options.UseSqlServer(connectionString)); 如果使用连接池,则在控制器请求DbContext实例时,将首先检查池中是否有可用的实例...一旦请求处理完成,实例上的任何状态都将重置,并且实例本身返回到池中。 这在思想概念上类似于ADO.NET中连接池的运作方式,并且能节省DbContext实例初始化成本。

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

    EF 数据库连接约定(Connection String Conventions in Code First)

    ,NuGet包将通过设置默认的Code First数据库服务器来更新配置文件,该数据库服务器在通过约定创建连接时首先使用该服务器。....(2)、如果连接字符串的name属性值和上下文类名不一样,但是还是希望上下文使用配置文件的数据库连接进行数据库连接,这时就需要在上下文构造函数中调用DbContext的带string参数的构造函数,并传入连接字符串的...另外一种方式是传递给DbContext构造函数配置文件中的connectionString节点的name属性来指定上下文通过配置文件中connectionString来连接字符串,代码如下: public...注:默认情况下,当前的连接字符串使用的是System.Data.SqlClilent作为provider,这里可以被改变通过做一个IConnectionFactory的不同的实现来替换context.Database.DefaultConnectionFactory...使用一个DbConnection 实例,或者是SqlConnection实例或者EntityConnection实例,传递给DbContext的构造函数均可指定对应的数据库连接规则. 2、You can

    1.5K90

    从头编写 asp.net core 2.0 web api 基础框架 (4) EF配置

    DbContext需要一个Provider,以便能访问数据库(这里我们就用LocalDB吧)。 我们就建立一个DbContext吧(大一点的项目会使用多个DbContext)。...但是它如何连接数据库?这就需要连接字符串,我们需要为DbContext提供连接字符串,这里有两种方式。...连接字符串中的ProductDb是数据库名;连接字符串的最后一部分表示这是一个受信任的连接,也就是说使用了集成验证,在windows系统就是指windows凭证。...它是: 如何安全的保存敏感的配置数据,例如:连接字符串 保存连接字符串,你可能会想到appSettings.json,但这不是一个好的想法。...而这个地方就是在你应该服务器上添加连接字符串的地方。再看一下调试: ? Environment的Provider在第4个位置,appSettings.production.json的在第3个位置。

    2.3K70

    生成数据库

    DbContext需要一个Provider,以便能访问数据库(这里我们就用LocalDB吧)。 我们就建立一个DbContext吧(大一点的项目会使用多个DbContext)。...但是它如何连接数据库?这就需要连接字符串,我们需要为DbContext提供连接字符串,这里有两种方式。...optionsBuilder提供了一个UseSqlServer()这个方法,它告诉Dbcontext将会被用来连接Sql Server数据库,在这里就可以提供连接字符串,这就是第一种方法。...它是: 如何安全的保存敏感的配置数据,例如:连接字符串 保存连接字符串,你可能会想到appSettings.json,但这不是一个好的想法。...而这个地方就是在你应该服务器上添加连接字符串的地方。再看一下调试: Environment的Provider在第4个位置,appSettings.production.json的在第3个位置。

    1K20

    从EFCore上下文的使用到深入剖析DI的生命周期最后实现自动属性注入

    但在EFCore中不同的是,DbContext不再提供无参构造函数,取而代之的是必须传入一个DbContextOptions类型的参数,这个参数通常是做一些上下文选项配置例如使用什么类型数据库连接字符串是多少...,DI容器会自动帮我们把options传进来。...如果要手动new一个上下文,那岂不是每次都要自己传?不行,这太痛苦了。那有没有办法不传这个参数?肯定也是有的。.../efcoredemo.db"); } 即使是这样,依然有不够优雅的地方,那就是连接字符串被硬编码在代码中,不能做到从配置文件读取。反正我忍受不了,只能再寻找其他方案。...这是因为,root provider只有一个,如果恰好有某个singleton服务引用了一个scope服务,这会导致这个scope服务也变成singleton,仔细看一下注册DbContext的扩展方法

    1.3K20

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

    ,而是被组合为一个传参存储过程脚本(用列值作为参数);如果使用EF6执行相同的代码,则在SQL Server Profiler中将看到3个独立的插入语句 。...下面是EFCore、EF6批量插入的对比截图: ? ?...,所以遇到很大数量的批量操作,EFCore SqlProvider会帮我们将批量操作分块传输,这也是我们在实际大批量使用时看到分块发送的原因。...语句数量,也可设定为1禁用批量插入 } 总结 ① EFCore 相比EF6,已经支持批量操作,能有效提高应用程序的性能 ② EFCore的批量操作能力,由对应的DataBaseProvider支撑(Provider...③ 另外一个批量操作的方法,这里也点一下:构造Rawsql 【EFCore也支持Rawsql】   sqlite不支持存储过程,为批量插入提高性能,可采用此方案: var insertStr = new

    3.5K10

    Entity Framework Core 2.0 入门

    映射: Type Configuration 配置 Owned Entities (替代EF6的复杂类型) Scalar UDF映射 分表 性能和其他 DbContext Pooling, 这个很好 Raw...SQL插入字符串....那么efcore会在指定的连接字符串的地方建立该数据库, 并应用当前的迁移....也可以): 输入用户名: 密码: 选择是否保存密码: 最后输入档案的名字: 随后VSCode将尝试连接该数据库, 成功后右下角会这样显示 (我这里输入有一个错误, 数据库名字应该是LearnEF): 随后在该文件中输入下面这个.../LearnEf.UI 看下控制台: 可以看到输出了sql语句, 而且这个出入动作后, 做了一个查询把插入数据生成的Id取了回来. 默认情况下log不显示传进去的参数, 这是为了安全.

    3.2K80

    Entity Framework Core 2.0 新特性

    这在概念上类似于ADO.NET提供的数据库连接池,旨在节省一些DbContext实例初始化的成本。...六.表拆分(Table splitting)   现在可以将两个或多个实体类型映射到同一表,其中主键列将被共享,每一行对应两个或多个实体。   ...包含定义导航的实体是所有者。当查询所有者时,默认将包含所属的类型。   按照惯例,将为所属类型创建一个影子主键,它将通过使用表拆分映射到与所有者相同的表。...目前只支持标量函数 EF Core迁移将不负责创建它,您必须在数据库中创建映射函数 九.code first 实体配置   在EF6可以通过 EntityTypeConfiguraiton 封装特定实体类型的配置代码...,在EF Core2.0中,这个特性回来了(EF Core 之前的 core版本不支持)。

    1.9K50

    EF Core 实现读写分离的最佳方案

    前言 公司之前使用Ado.net和Dapper进行数据访问层的操作, 进行读写分离也比较简单, 只要使用对应的数据库连接字符串即可...., 再关闭之前的连接, 才能进行切换 另一种方式是通过监听Diagnostic来将进行查询的sql切换到从库执行, 这种方式虽然可以实现无感知的切换操作, 但不能满足公司的业务需求....我认为最理想的方式是要避免数据库连接的切换, 且能够适应多DbContext的情况, 在创建上下文实例时,就指定好是访问主库还是从库, 而不是在后期再进行数据库切换....因此, 在上下文实例化时,就传入相应的数据库连接字符串, 这样一来DbContext的创建就需要交由我们自己来进行, 就不是由DI容器进行创建了....IUnitOfWork GetUnitOfWork(Type dbContextType, string dbName = null); } IDbProvider 接口, 根据上下文类型和配置文件中的数据库连接字符串名称创建

    2.3K00

    CSharpEntityFramework与CodeFirst实践

    ”连接字符串。...换句话说,继承了DbContext的类就对应了某一个数据库,其连接属性由配置文件中的连接配置决定,并在DbContext中设置进去(基类构造函数设置),这个DbContext中的所有DbSet就对应到数据库中的表...注意到,构造函数调用了基类构造函数,传入了"name=BookDbDemo"字符串,这个字符串就是指app.config配置文件中的数据库连接名,然后我们查看App.config文件,发现vs已经为我们生成了一个连接字符串节点...创建好的数据库如下: 于是,我们将其中的连接字符串connectionString内容修改为我们当前的数据库连接字符串: 将变更更新到数据库中,得到当前的数据库内容: 此时我们将book表中填充一些数据: 然后,我们将DbContext中的DbSet属性删除,再次进行迁移

    28310

    EF Core 数据验证

    首先我们要创建一个上下文的扩展方法: public static List ExecuteValidation(DbContext context) { List...这时一定有部分小伙伴想到了通过重写 SaveChanges 方法,将验证代码加入到这个方法中,这样就可以解决刚才的那个问题,达到一劳永逸的效果。...我们定义完验证规则后下一步就是将我们定义的验证规则与应用程序连接起来,这里我们需要用到 AddFluentValidation 来注入,例如在 Asp.Net Core 程序中我们将注入程序写入 Startup...示例代码如下: if(ModelState.IsValid) { //后续代码 } else { //验证不通过处理代码 } 这里有一点需要注意,当传递的实体为 null 时,将返回错误信息,这是因为...二、总结 本篇文章讲解了 EF Core 数据验证的方法,虽然讲的时 EF Core 的方法,但是同样也适用于 EF6 ,这些内容是常用的,上述部分代码可以在大部分项目中通用。

    1.2K20

    Entity Framework应用:使用Code First模式管理数据库创建和填充种子数据

    一、管理数据库连接 1、使用配置文件管理连接之约定 在数据库上下文类中,如果我们只继承了无参数的DbContext,并且在配置文件中创建了和数据库上下文类同名的连接字符串,那么EF会使用该连接字符串自动计算出数据库的位置和数据库名...,即“SampleDbEntities”,并在配置文件中寻找和它同名的连接字符串,然后它会使用该连接字符串计算出应该使用哪个数据库provider,之后检查数据库位置,之后会在指定的位置创建一个名为TestDb.mdf...// 添加到数据上下文中 20 public virtual DbSet Students { get; set; } 21 } 22 } 上面的代码将连接字符串的名字传给了...DbContext类的有参构造函数,这样一来,我们的数据库上下文就会开始使用该连接字符串了,在Program类中输出Name和Age字段的值: 1 using ExistsConnectionString.EF...无论我们对传入的连接字符串名称如何改变,都是无济于事的,也就是说和数据库上下文类名同名的连接字符串优先权更大。

    1.2K20

    Oracle中使用Entity Framework 6.x Code-First方式开发

    去年写过一篇EF的简单学习笔记,当时EF还不支持Oracle的Code-First开发模式,今天无意又看了下Oracle官网,发现EF6.X已经支持了,并且给出了二篇教程(英文版): 1.Using NuGet...下图这二个地方,是用来配置连接字符串的,记得修改 ?...ok, ODP.Net安装配置完成 2.使用Code First模式开发 a) 先参考下图,修改连接字符串(本文用的是HR这个示例用户,大家可以根据实际情况修改) ?...下面是DbContext部分,相当于DAL层.注意:OnModelCreating,这里表示根据Model创建表时,默认将创建到HR这个Database Schema下 ? 运行结果 ?...然后将Employee的类定义,把原来注释掉的Location属性行,去掉注释(即:增加了Location属性) ?

    1.4K50
    领券