实体框架核心:DbContextOptionsBuilder不包含"usesqlserver"的定义,也没有"usesqlserver"的扩展方法。

369

我对EF Core不熟悉,正尝试将其与我的ASP.NET Core项目配合使用。

在我的startup.cs文件中,当尝试配置DbContext以使用来自配置的连接字符串时,出现了上述错误。我正在遵循此教程

有问题的代码在startup.cs中:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.SpaServices.Webpack;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.EntityFrameworkCore;
using tracV2.models;
using tracV2.data;

namespace tracV2
{
    public class Startup
    {
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddMvc();

            services.AddSingleton<IConfiguration>(Configuration);

            string conn = Configuration.GetConnectionString("optimumDB");

            services.AddDbContext<tracContext>(options => options.usesqlserver(conn));
        }

如果我直接将UseSqlServer方法放入上下文中,则可以识别它:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;

namespace tracV2.data
{
    public class tracContext : DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("myrealconnectionstring");
        }

我所有在网上查到的研究都指向缺失引用,但是我似乎找不到我缺失的是哪一个(请看图片)。


同样的问题,智能感知也找不到这个方法。 - Maxime Laflamme
这是项目系统中已知的问题。请参见dotnet/project-system#1741 - bricelam
36个回答

2

哇,这么多回答却没有提到Microsoft.EntityFrameworkCore.InMemory包!

添加对此包的引用:<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="2.2.2" />,然后你就可以开始了。

最初的回答


2
如果您在使用Sqlite时遇到此问题,则我认为这是Sqlite版本的问题。当我使用 SqLite 的以下版本时,也遇到了同样的问题: 版本 2.2.4:

enter image description here

检查了版本这里 enter image description here之后,我改变了版本号,然后它就正常工作了。

enter image description here

使用后没有错误。
版本2.1.2:

enter image description here


2

我阅读并按照每个答案的指示进行了操作,最终发现我的问题是因为我的DbContext缺少一个构造函数。

public Context(DbContextOptions<Context> options) : base(options) { }

我希望这篇内容能够帮助到遇到相同问题的人。

2

对于仍然遇到此问题的人:

使用NuGet安装:Microsoft.EntityFrameworkCore.Proxies

此问题与在EFCore中使用Castle Proxy有关。

最初的回答


这对我解决了问题。在learn.microsoft.com上也提到了_"使用延迟加载的最简单方法是安装Microsoft.EntityFrameworkCore.Proxies包,并通过调用UseLazyLoadingProxies启用它。"_ https://learn.microsoft.com/en-us/ef/core/querying/related-data/lazy - metatron

1
我通过以下方式解决了这个问题: 1. 将SqlServerDbContextOptionsExtensions添加到相关类中 2. 解决SqlServerDbContextOptionsExtensions 这样就解决了问题,可能是默认情况下缺少某些引用。

1
我在升级到 Microsoft.EntityFrameworkCore.SqlServer v3.0.0 和 Microsoft.EntityFrameworkCore.Tools v3.0.0 后遇到了这个问题。当我将这两个库都降级回 v2.2.6 时,错误消失了。这更像是一种解决方法而不是解决方案,但它可以让您继续运行,直到问题得到解决。

1

目前正在使用Entity Framework Core 3.1.3。上述解决方案均未解决我的问题。

然而,安装Microsoft.EntityFrameworkCore.Proxies包后,我的项目问题得到了解决。现在我可以在设置DBContext选项时访问UseLazyLoadingProxies()方法调用。

希望这能帮助到某些人。请参阅以下文章:

EF Core中的延迟加载


0

对于 asp.net core 2.1 版本,请确保添加以下包以解决问题。(至少这可以通过使用 SQLite 来修复问题)

dotnet add package Microsoft.EntityFrameworkCore.Sqlite
dotnet add package Microsoft.EntityFrameworkCore.Design

这里是使用SQLite和实体框架核心的文档参考。 https://learn.microsoft.com/en-us/ef/core/get-started/netcore/new-db-sqlite


0
在我的.Net6案例中,安装了(Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.Tools)之后,我不得不安装"Microsoft.EntityFrameworkCore.Design"来获取UseSqlServer()函数的定义。

0
将以下代码复制到https://github.com/aspnet/Docs/tree/master/aspnetcore/tutorials/first-web-api/sample/TodoApi的TodoApi.csproj中,对我解决了类似的问题。
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Folder Include="wwwroot\" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
  </ItemGroup>

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
  </ItemGroup>

</Project>

Microsoft.AspNetCore.All 可能有些过多,但它包括 EntityFrameworkCore。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接