如何在EF Core 2.2中进行原始SQL查询? - c#

我正在使用dotnet core 2.x应用程序。

我们有一堆“代码优先”的实体,并且在DBContext中为每个实体都有一个DBSet。

例:

public class MyContext : DBContext
{
  public MyContext(DBContextOptions<MyContext> options) : base (options) {}

  public DbSet<Models.MyTable> MyTable { get; set; }
  ...

到目前为止,一切都很好。现在,我想进行以下查询:

SELECT DISTINCT MyColumn from dbo.MyTable

应该很容易吧? “经典EF”具有dbData.Database.SqlQuery<SomeModel>,但是在EF Core 2.x中,我应该能够执行以下操作:

var myList = _context.MyTable.FromSql("SELECT DISTINCT MyColumn from dbo.MyTable").ToList();

这将失败:

错误CS1061:DbSet不包含FromSql的定义。

我读到,也许我需要安装一个附加软件包“ Microsoft.EntityFrameworkCore.Relational”。但是NuGet>浏览仅显示v3.1(没有2.x版本)...,安装此软件包希望引入许多其他依赖项(!)

题:

有什么方法可以使用EF Core 2.x进行简单的SQL查询吗?

...不需要“ select *”(进入整个表格!)并且不需要下载并安装一堆其他的NuGet依赖项吗?

参考方案

我认为您真正想要的是FromSqlRaw https://docs.microsoft.com/en-us/ef/core/querying/raw-sql

无论如何,如果您使用的是EF,那么对于这样一个简单的查询,就不需要这样做。 EF select不需要您从整个表架构中获取数据。您可以使用.select指定所需的确切列。

有关更多信息,请参见https://www.brentozar.com/archive/2016/09/select-specific-columns-entity-framework-query/。

使用Entity Framework Core(2.1)调用标量函数的最佳实践 - c#

我经常需要从Web应用程序(ASP.NET Core / EF Core)中调用在SQL Server上定义的标量函数。由于这些函数只是简单的辅助函数,因此我也使用了许多辅助函数,因此我使用了通用模式来调用这些标量函数-借助EF Core 2.1可用的新查询类型。由于我是EF Core的新手,所以我的问题是这种模式是否会引起问题,并且/或者是否存在调用标量函…

如何在命令行上更改连接字符串以在迁移到Entity Framework Core中的新数据库时更新数据库 - c#

首先在ASP.NET Core和EF Core代码中,我有一个多租户的webapp。创建新租户时,我想更改连接字符串,在其上添加迁移,然后更新。从命令行,添加迁移无法在租户上获得动态的连接字符串,因此在应用程序首次以新租户开始时,我没有有效的连接字符串来创建新数据库。有什么解决办法吗?谢谢 参考方案 您在找这个吗?编辑:这是为EF 6.1Update-Dat…

ASP.NET Core-在Singleton注入上存储库依赖项注入失败 - c#

我正在使用SoapCore为我的ASP.NET Core MVC应用程序创建Web服务。我正在使用Entity Framework Core和简单的存储库模式来获取我的数据库数据。我通过Startup.cs中的.AddSingleton()注入存储库类:services.AddSingleton<IImportRepository, ImportRep…

ASP.NET Core Singleton实例与瞬态实例的性能 - c#

在ASP.NET Core依赖注入中,我只是想知道注册Singleton实例是否会比注册Transient实例更好地提高性能?在我看来,对于Singleton实例,创建新对象和相关对象只需花费一次时间。对于Transient实例,此成本将针对每个服务请求重复。因此Singleton似乎更好。但是,在Singleton上使用Transient时,我们可以获得多…

如何在ASP.NET Core Web应用程序中增加JSON反序列化MaxDepth限制 - c#

我们正在将ASP.NET Core 2.1与.NET Framework 4.6.2结合使用。我们有一个客户需要向我们的Web应用程序发送一个很大程度上嵌套的json结构。当他们进行此调用时,我们将输出以下日志并返回错误: 读取器的MaxDepth超过了32。路径“ super.long.path.to property”,第1行,位置42111。”我浏览了…