簡體   English   中英

從.NetCore2.1更改TargetFramework時如何替換Database.ExecuteSqlQuery

[英]How do I replace Database.ExecuteSqlQuery when changing TargetFramework away from.NetCore2.1

我有以下在帶有SDK的.NetCore2.1中運行良好的功能

Microsoft.AspNetCore.App(2.1.1) 
Microsoft.NetCore.App(2.1.0)

我的代碼是

public static int TransitTime(string postcode, ApiDbContext con)
{

    var query = "SELECT top 1 Mins from Transit where postcode = @Postcode order by mins desc;";
    var p1 = new SqlParameter("@Postcode",postcode);
    var result = 0;
    using (var dr = con.Database.ExecuteSqlQuery(query,p1))
    {
        var reader = dr.DbDataReader;
        while (reader.Read()) result = (int)reader[0];
    }
   return Convert.ToInt32(result);
}

將鼠標懸停在數據庫一詞上我可以看到它在

Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade

數據庫外觀

我沒有看到具體的參考

Microsoft.EntityFrameworkCore.Infrastructure 

它被記錄為實體框架核心2.1的一部分

在兩個SDK中,所以我想知道如何引用它。

但是我需要添加對Framework 4.7.2 dll的引用

所以我切換到以下項目文件

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Library</OutputType>
    <TargetFramework>netstandard2.0</TargetFramework>
  <ApplicationIcon />
    <StartupObject />
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.6" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="2.2.6" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.2.6" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.2.0" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\Common\SBD.Common.csproj" />
  </ItemGroup>
</Project>

現在我得到一個錯誤

CS1061'DatabaseFacade'不包含'ExecuteSqlQuery'的定義

我嘗試在Nuget Manage Packages for Solution中查找Microsoft.EntityFrameworkCore.Infrastructure形式,但未顯示。

看着這個問題,我決定嘗試改用.FromSQl。

在文檔中找到了幫助,但沒有說明如何返回非實體類型。 我怎么做?

閱讀完此鏈接的末尾后,我正在嘗試

public static int TransitTime(string postcode, ApiDbContext con)
{
    var query = "SELECT top 1 Mins from Transit where postcode = @Postcode order by mins desc;";
    var p1 = new SqlParameter("@Postcode", postcode);
    var result = 0;
    using (var command = con.Database.GetDbConnection().CreateCommand())
    {
        command.CommandText = query;
        command.Parameters.Add(p1);
        con.Database.OpenConnection();
        using (var reader = command.ExecuteReader())
        {
            while (reader.Read()) result = (int)reader[0];
        }
    }
    return Convert.ToInt32(result);
}

我看到這是在Microsoft.EntityFrameworkCore.Infrastructure中使用擴展方法

擴展方式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM