【发布时间】:2019-08-24 09:40:19
【问题描述】:
我有以下在带有 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
是documented as being part of Entity Framework Core 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 但它没有显示。
看着this question,我决定尝试改用.FromSQl。
我找到了help in the docs,但它没有解释如何返回非实体类型。 我该怎么做?
【问题讨论】:
-
FromSql 只有在返回的数据是被访问的类型时才能执行原始 SQL 查询,并且它还期望从数据库返回的列名与映射对象中可用的列名匹配。这就是为什么您需要专门定义 dbset。
-
谢谢我重命名了问题...我需要返回不在数据库中的类型。
-
有什么原因不能创建实体类吗?
-
好吧,你不走运,因为 EF Core 还不支持。这与 .NET Core 无关,EF Core 是与您要升级的 EF6 完全不同的框架。见Compare EF Core & EF6。
-
我正在从 .netcore2.1 升级