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

EF Core3.0是否可以在ModelBuilder内而不是在DbSet<>上使用FromSql

EF Core 3.0中可以在ModelBuilder内使用FromSql,而不仅限于在DbSet<>上使用。FromSql方法允许我们在查询中使用原生SQL语句,并将其映射到实体类。这在某些特定场景下非常有用,例如在需要进行复杂查询或使用特定数据库特性时。

使用FromSql的步骤如下:

  1. 在DbContext派生类中,重写OnModelCreating方法。在该方法中,通过ModelBuilder对象来配置实体类和数据库之间的映射关系。
  2. 在ModelBuilder对象上调用Entity<TEntity>方法来指定实体类的配置。在配置实体类时,可以使用ToTable方法指定数据库中的表名,使用Property方法配置实体类中的属性,等等。
  3. 在配置实体类之后,可以调用Entity<TEntity>对象的ToQuery方法来指定一个原生SQL查询,用于将其映射到实体类。此时可以使用FromSql方法将原生SQL查询添加到实体类中。

例如,假设我们有一个User实体类,并且想要使用原生SQL查询来获取一些特定的用户数据。我们可以按照以下步骤进行配置:

代码语言:txt
复制
public class MyDbContext : DbContext
{
    public DbSet<User> Users { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<User>().ToTable("Users");

        modelBuilder.Entity<User>().ToQuery(() =>
            Users.FromSql("SELECT * FROM Users WHERE Age > 18"));
    }
}

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

在上述示例中,我们通过重写OnModelCreating方法配置实体类User的映射关系。然后,使用ToQuery方法和FromSql方法指定了一个原生SQL查询,该查询会将Age大于18的用户数据映射到User实体类。

需要注意的是,FromSql方法只用于查询操作,不能用于插入、更新或删除操作。此外,使用原生SQL查询需要谨慎,确保输入的SQL语句安全可靠,以避免潜在的安全风险。

关于EF Core的更多信息和相关的腾讯云产品,请参考以下链接:

相关搜索:是否可以在表链接中使用OR而不是AND是否可以在设备上而不是在模拟器上运行Fastlane/Snapshot?是否可以在MvvmCross中使用其他组件而不是MvxWindow?我是否可以使用管道|在R中,而不是在%>%中是否可以在chromecast (而不是mirror)上转换android应用程序是否可以在0.0.0.0而不是127.0.0.1上启动Vault开发服务器?是否可以在centos 7上运行elasticsearch 6.3.x而不是elasticsearch?是否可以在serializeUser而不是deserializeUser上查找用户的数据库?是否可以在Keycloak中使用RSA-512而不是RSA-256?Firebase signInWithEmaiLlink -是否可以在UI上提供链接,而不是通过电子邮件是否可以在API28或更高版本中使用FingerprintManager而不是BiometricPrompt?是否可以在kurento色度滤镜模块中使用视频而不是图像作为背景?我是否可以在画布中显示游戏输赢后的结果,而不是使用"Alert"?是否可以使用箭头(->)而不是点(.)在提取方法时访问结构成员?是否可以使用webhooks和JSON在IFTTT中拉取本机图像(而不是链接)?是否可以在THREE.BufferGeometry中使用Float64Array而不是Float32Array是否可以使用单个配置,而不是将Debug和Release分开(在我们的例子中)?React -是否可以在应用程序中使用localStorage项,而不是从redux获取此状态?在显示石灰解释结果时,是否可以使用output_file而不是show_in_notebook?是否可以将Jackson XmlMapper配置为在序列化时使用单引号而不是双引号?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Entity Framework Core 2.0 新特性

此特性允许使用Linq查询表达式直接定义实体类型的元数据模型。这样的过滤器会自动应用到任何LINQ查询所涉及的那些实体类型,包括间接引用的实体类型(对象引用,导航属性)。...局限性: 过滤器只能在层次结构的根实体类型定义 过滤器不允许使用导航属性进行过滤(可以根据反馈添加此功能。)...FromSql和ExecuteSqlCommand方法时加入参数化查询    使用C#6.0的特性构建SQL语句并使用FromSql和ExecuteSqlCommand方法执行SQL语句时,会自动加入使用参数化查询...支持映射数据库中定义的函数,可以LINQ查询中使用。   ...一旦注册了方法,您就可以查询的任何地方使用它。  要注意的几件事: 按照惯例,在生成SQL时,该方法的名称用作函数的名称(本例中是用户定义的函数),但可以方法注册期间重写名称和schema。

1.9K50

Entity Framework Core 2.0 新特性

使用所属类型与EF6中使用复杂类型类似,(PS:这里解释一下EF6中的复杂类型,复杂类型是允许实体中组织标量属性的实体类型的非标量属性。像实体一样,复杂类型由标量属性或其他复杂类型属性组成。)...嗯..软删除,多租户的数据库设计  可以大量的使用这方面的功能,会减少很多代码量 public class BloggingContext : DbContext { public DbSet<...) { var customer = _customerById(db, 147); } 3.查询方面 3.1改进LINQ翻译 使更多的查询成功执行,并将更多的逻辑生成SQL让它在数据库中执行(不是内存中...EF核2.0,我们增加了对插值字符串中的特殊支持,我们接受原始的SQL字符串两个主要的API:FromSql和ExecuteSqlCommand。...() 添加了EF.Functions属性(注意,这里应该是可以扩展的,添加更多的数据库方法),EF Core可以使用它们来定义映射到数据库函数或操作符的方法,以便可以LINQ查询中调用它们。

3.9K90
  • Entity Framework Core 2.0 入门

    此外, Efcore的迁移Api也可以获得该方法的信息....也可以): 输入用户名: 密码: 选择是否保存密码: 最后输入档案的名字: 随后VSCode将尝试连接该数据库, 成功后右下角会这样显示 (我这里输入有一个错误, 数据库名字应该是LearnEF): 随后该文件中输入下面这个...可以看到这个和之前Add的Sql语句是完全不同的: 这个语句我不是很明白....过滤的条件可以直接家在上面的某些方法里面, 例如: 通过主键查询, 就可以DbSet的Find方法: 这个方法有个优点, 就是如果这条数据已经Context里面追踪了, 那么查询的时候就不查数据库了...(FromSql可以Include). 预加载子表的子表: 可以使用ThenInclude方法, 这个可以老版本ef没有的.

    3.2K80

    Entity Framework 约定

    我们定义完模型,还需要让EF上下文你知道应该映射那些模型,此时我们需要通过 DbSet 属性来暴露模型的。...EF中定义关系要使用到导航属性,通过导航属性可以定义多个模型之间的关系。大部分情况下我们会将导航属性和外键属性结合在一起使用。...当EF检测出外键属性后,会根据外键属性是否为空来判断关系,如果外键可以为空,那么模型之间的关系将会配置成可选的,Code First 不会再关系上配置级联删除。...简单的说就是:一个复杂类型作为已存在对象的属性,EF会将复杂类型的类映射到已存在的表中,已存在的表包将包含这些列,不是将复杂类型映射成另外单独的一张表。...自定义约定可以看作全局约定规则,将会运用到所有实体和属性,也可以显示实现应用到指定的模型

    1.3K10

    .NET 云原生架构师训练营(模块二 基础巩固 EF Core 基础与配置)--学习笔记

    /connection-strings ASP.NET Core 配置系统非常灵活,并且可以将连接字符串存储 appsettings.json 、环境变量、用户密钥存储或其他配置源中 appsettings.json...上下文池可以通过重复使用上下文实例,不是为每个请求创建新实例,从而提高大规模方案(如 web 服务器)的吞吐量。...,在请求上下文实例时,EF 首先检查池中是否有可用的实例。...避免维护状态的应用程序中使用上下文池。 例如,不应在请求之间共享的上下文中的私有字段。 将上下文实例添加到池中之前,EF Core 仅重置它知道的状态。...tabs=data-annotations 模型中包含类型 class MyContext : DbContext { // 对应一张表(推荐) public DbSet

    75811

    【源码解读(一)】EFCORE源码解读之创建DBContext查询拦截

    最好了,这样可能会存在误解开发者,InternalServiceProvider是很有用,可以和我们的web共用一个ioc容器,本文的最后,我会将ef的ioc容器托管到web的。     ...ef的ioc到web的时候可以使用这种方式来实现,后面也会写一个这样的例子。...IDbContextOptionsExtension,这个我们可以不托管ef的ioc到web的ioc的时候,我们可以实现一个这个接口,然后代码添加到Extension就可以注入EF所需要用到的服务。...,Ef也会注入一遍,重复注入,Program.cs里面我们先注入一个返回IServiceCollection的Func,这样DBContext可以获取到这个 传到ServiceExtension里面...ComileQuery方法,构建了一个委托,实际,我们在业务编码中,也可以使用缓存查询,来提升业务系统的性能,虽然我们不能使用IDataBase的这个发给发,但是EF提供了一个静态类,里面的ComileQuery

    80220

    .NET 云原生架构师训练营(模块二 基础巩固 EF Core 介绍)--学习笔记

    UnitOfWork 工作单元 一个工作单元一个事务范围保留所有对数据库的变更,在这个工作单元结束的时候一次性提交所有改动到数据库 DB Context 与 DB Set DB Context(UnitOfWork...public DbSet Assistants { get; set; } public DbSet<Project.ProjectGroup...override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(...DbContext 完成数据查询与插入 初始化数据库 ,注意在初始化以前确保正确配置了连接字符串,并且startup.cs中添加了DbContext的注入 // 安装dotnet tool ef工具...dotnet tool install --global dotnet-ef // 以下命令需要在api项目的目录下执行 // 项目安装 dotnet add package Microsoft.EntityFrameworkCore.Design

    81810

    张高兴的 Entity Framework Core 即学即用:(一)创建第一个 EF Core 应用

    虽然 .NET 平台中 ORM 框架有很多,比如 Dapper、NHibernate、PetaPoco 等,并且 EF Core 的性能也不是最优的(这是由于 EF 的实体跟踪特性,将其禁用后可以大幅提升性能...此处并没有否认 SQL Server 是一款优秀的数据库,并且 EF 的很多特性 SQL Server 上表现更好,可以说 SQL Server 是 EF Core 的最佳实践。...PostgreSQL 开源且免费,甚至可以运行在 ARM 的 Linux 开发板,性能也要优于 MySQL。... Code First 中手动编写实体类这一步是不可避免的,大型项目中数十上百的实体类,这些工作量是不容小觑的。因此本文不会介绍 Code First 的有关操作。...实例化数据库上下文后,仍然可以使用 Set() 方法获取实体类的 DbSet

    2.5K10

    .NET EF Core(Entity Framework Core)

    EF Core不支持模型优先,推荐使用代码优先,遗留系统可以使用Scaffold-DbContext来生成代码实现类似DBFirst的效果,但是推荐用Code First 。...2、EF会对实体的标注做校验,EF Core追求轻量化,不校验。 3、熟悉EF的话,掌握EFCore会很容易,很多用法都移植过来了。EF Core又增加了很多新东西。...OutputDir”参数的形式来同一个项目中为不同的数据库生成不同的迁移脚本 小结: 1、使用迁移脚本,可以对当前连接的数据库执行编号更高的迁移,这个操作叫做“向上迁移”(Up),也可以执行把数据库回退到旧的迁移...EF Core会把Linq操作转换为SQL语句。面向对象,不是面向数据库(SQL)。...RowVer { get; set; } } builder.Property(h => h.RowVer).IsRowVersion(); Tips:乐观并发控制能够避免悲观锁带来的性能、死锁等问题,因此推荐使用乐观并发控制不是悲观锁

    23711

    .NET 云原生架构师训练营(模块二 基础巩固 EF Core 基础与配置)--学习笔记

    /connection-strings ASP.NET Core 配置系统非常灵活,并且可以将连接字符串存储 appsettings.json 、环境变量、用户密钥存储或其他配置源中 appsettings.json...上下文池可以通过重复使用上下文实例,不是为每个请求创建新实例,从而提高大规模方案(如 web 服务器)的吞吐量。...,在请求上下文实例时,EF 首先检查池中是否有可用的实例。...避免维护状态的应用程序中使用上下文池。例如,不应在请求之间共享的上下文中的私有字段。将上下文实例添加到池中之前,EF Core 仅重置它知道的状态。...tabs=data-annotations 模型中包含类型 class MyContext : DbContext { // 对应一张表(推荐) public DbSet

    95820

    .NET 云原生架构师训练营(模块二 基础巩固 EF Core 介绍)--学习笔记

    仓储 领域层和数据映射层之间,像一个内存级别的领域对象集合 为领域业务的单元测试提供替换点 集中数据库访问逻辑 24.jpg UnitOfWork 工作单元 一个工作单元一个事务范围保留所有对数据库的变更...public DbSet Assistants { get; set; } public DbSet<Project.ProjectGroup...override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(...DbContext 完成数据查询与插入 初始化数据库 ,注意在初始化以前确保正确配置了连接字符串,并且startup.cs中添加了DbContext的注入 // 安装dotnet tool ef工具...dotnet tool install --global dotnet-ef // 以下命令需要在api项目的目录下执行 // 项目安装 dotnet add package Microsoft.EntityFrameworkCore.Design

    94711

    Entity Framework 4.1 Code-First 学习笔记

    默认情况下,将在你的本地机器使用上下文对象名称,有许多方式来覆盖这个行为,最简单的方式是配置文件中增加一个名字为上下文对象名称的数据库连接串,我这里,叫做 MyDomainContext,还可以通过实现一个构造函数...由 SQL Server 每次记录被更新的时候维护这个列。为了告诉 EF 实体中有一个属性表示并发标识,你可以通过标签 [ConcurrencyCheck] 来标识这个属性,或者使用模型构建器。...DbContext.Database.SqlQuery:这个方法将返回的数据集映射到相应的对象,不去管这个对象是不是实体。重要的是 EF 不会跟踪返回的对象,即使他们是真正的实体对象。   ...DbSet.SqlQuery:这个方法返回的实体将会被 EF 跟踪修改,所以,如果你在这些返回的实体做了修改,当 DbContext.SaveChanges 被调用的时候,将会被处理。...因此,我们可以通过从一个返回任何结果的简单查询开始,然后在其应用 LINQ来得到有效的查询,不需要在使用方查询整个表。

    1.6K10

    ASP.NET Core MVC+Layui使用EF Core连接MySQL执行简单的CRUD操作

    二、添加EF Core NuGet包:   若要在项目中使用EF Core操作MySQL数据库,需要安装相应的数据库驱动包。...三、创建对应数据库表的实体模型:   注意该篇博客使用的是手动模型优先的方式进行数据库表字段与模型属性映射,当然如果大家觉得这样子比较麻烦的话可以真正意义的模型优先,直接创建模型program.cs...; } /// /// TODO:当数据库创建完成后, EF 创建一系列数据表,表名默认和 DbSet 属性名相同。...集合属性的名称一般使用复数形式,但不同的开发人员的命名习惯可能不一样, /// 开发人员根据自己的情况确定是否使用复数形式。...定义 DbSet 属性的代码之后,添加下面代码,对DbContext指定单数的表名来覆盖默认的表名。

    2.8K10

    Mysql 该如何 Entity Framework 数据库迁移 和 如何更好的支持EF.Extended

    问题 1.使用EntityFramework访问Mysql的时候,使用迁移来生成数据库或者更新数据库时候会遇到一些问题 2.EntityFramework.Extended对Mysql的支持不是很完全...1.首先解决第一个问题 准备条件:用Nuget下载Mysql.Data.Entity(可以将依赖连同下载) ?...的注释掉 运行的时候拿掉注释 base.OnModelCreating(modelBuilder); } } 然后项目的启动的入口增加如下代码(我这是...ef中开启事物,即可解决此问题代码如下 using (ClinicSystemContext db = new ClinicSystemContext()) {...注意: 使用ef.Extened时候,修改实体,需要迁移数据库的时候,需要想将DbContext里面的 modelBuilder.HasDefaultSchema(""); //

    1.7K110

    EF 约定介绍

    ,EF自动生成中间表,不需要新增实体来表示. (5)、表名默认复数化 2、类型发现约定(Type Discovery) 使用EF开发,往往是以定义一些模型类开始,定义完这些模型类之后,需要让DbContext...就可以使用 context(数据库上下文),使用这些预先暴露的DbSet类型,具体的代码如下:   public class EFStudyDbContext:DbContext {...中,两个实体间的关系是通过导航属性的方式来实现,每一个对象都能拥有一个它所参与的关系的导航属性,导航属性提供了一种方式两端来操作这个关系来获取我们需要的数据,可以返回任何一方的引用对象(对象间的关系是...数据库连接约定(Connection String Conventions in Code First) 二、移除约定 EF提供了移除默认约定的方法,通过该方法我们可以移除所有定义System.Data.Entity.ModelConfiguration.Conventions...modelBuilder.Conventions.Remove(); } } 三、自定义约定 EF 自定义约定

    1.6K100

    【愚公系列】2023年02月 .NETC#知识点-使用控制台手搭webapi框架

    文章目录 前言 一、使用控制台手搭webapi框架 1.配置文件 2.控制台配置 二、EFCore框架DBSet配置详解 1.实体统一配置 2.实体继承统一接口 3.获取程序集所有类 4.批量注入模型类到...配置详解 1.实体统一配置 EF实体继承统一的接口,方便我们反射获取所有EF实体,接口可以设置一个泛型,来泛化我们的主键类型,因为可能存在不同的表的主键类型也不一样。...base.OnModelCreating(modelBuilder); } } } 所有的实体类都被注册到DBContext中作为DBSets,再也不需要一个个写DBSet...了,可以用过DbContext.Set()获取用户的DBSet。...UsersController : ControllerBase { private readonly ILogger _logger; //生产中可以应用层下创建

    1.5K10
    领券