如何解决方法未找到:System.Collections.Generic.IList`1<Microsoft.EntityFrameworkCore.Metadata.Conventions.IModelFinalizingConvention>

问题描述 投票:0回答:6

目前我正在尝试在 macOS 上开发 C# (ASP.NET MVC) Web 应用程序,我在 .NET 6.0.402 上运行

当我运行

dotnet ef update database
来更新我的数据库时,我收到此错误:

找不到方法:'System.Collections.Generic.IList`1 Microsoft.EntityFrameworkCore.Metadata.Conventions.ConventionSet.get_ModelFinalizingConventions()'。

我确实摆弄了我的 Migrations-> [serial]_[name].designer.cs 文件,因为它没有自动生成信息来匹配我运行时的模型

dotnet ef migrations add

Jokes.cs(模型)

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

namespace JokeWebApp.Models
{
    public class Joke
    {
        public int Id { get; set; }
        public string? JokeQuestion { get; set; }
        public string? JokeAnswer { get; set; }

        //ctor shortcut for constructor
         public Joke()
        {

        }
    }

}

20221109024428_initialsetup.Designer.cs(数据->迁移)

// <auto-generated />
using System;
using JokeWebApp.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;


namespace JokeWebApp.Data.Migrations
{
    [DbContext(typeof(ApplicationDbContext))]
    [Migration("20221109024428_initialsetup")]
    partial class initialsetup
    {
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
        {
#pragma warning disable 612, 618


modelBuilder.HasAnnotation("ProductVersion", "6.0.10")
.HasAnnotation("Relational:MaxIdentifierLength", 128)
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

modelBuilder.Entity("JokeWebApp.Models.Joke", b =>
{
b.Property<int>("Id").ValueGeneratedOnAdd()
.HasColumnType("int")
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

b.Property<string>("JokeAnswer")
.HasColumnType("nvarchar(max)");

b.Property<string>("JokeQuestion")
.HasColumnType("nvarchar(max)");

b.HasKey("Id");

b.ToTable("Joke");
});

...

项目.csproj

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <UserSecretsId>aspnet-JokeWebApp-c27aee20-1e9d-4266-993b-368018ae336f</UserSecretsId>
  </PropertyGroup>

  <ItemGroup>
    <None Update="app.db" CopyToOutputDirectory="PreserveNewest" ExcludeFromSingleFile="true" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="6.0.10" />
    <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="6.0.10" />
    <PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="6.0.10" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="6.0.10" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.10" />
  </ItemGroup>

</Project>

我不确定我是否缺少所需的软件包,或者我在摆弄

designer.cs
文件时弄乱了某个地方。

有人能指出我正确的方向吗?

我确保我的

Project.csproj
中的软件包参考是最新的。想知道是否可能存在一些差异:

 <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.0" />

其他软件包的版本为“6.0.10”,不确定我是否应该将其作为

Microsoft.EntityFrameworkCore.SqlServer.SqlServer
的版本,因为这是我为了访问而下载的软件包
SqlServerValueGenerationStrategy.IdentityColumn
.

我还在另一个线程上读到该问题可能是由于旧版本的 DLL 造成的。如何确保所有内容都是最新文件,在重建应用程序之前我需要删除哪些构建项目?

c# asp.net-mvc macos
6个回答
12
投票

nuget包之间存在版本不匹配的情况,将ef core包升级到7.0.0版本即可解决问题。


4
投票

我的解决方案添加到.net core 7中:

Microsoft.EntityFrameworkCore.InMemory 版本=“7.0.4”


1
投票

我的问题是我在处理 .Net 6 项目时使用 efcore 7.0。降级 efcore 以匹配 .Net 框架解决了这个问题。


0
投票

EntityFrameworkCore 7.0.0 及以上的 NuGet 版本仅在安装了 NET 7.0 版本时才有效,因此在您的情况下,您必须再次更新到 6.0.13,这是迄今为止的最新版本。我遇到了同样的问题,所以我希望您能够通过安装 NET 7.0 或返回到旧的参考文献来最终解决它。


0
投票

如果您的应用程序将 ASP.NET Core 运行状况检查与内存存储提供程序一起使用,则可能会产生对旧版本 EntityFrameworkCore 的依赖,而不是应用程序用于其主数据库连接的版本。


0
投票

我在 .NET 8 中获取数据时遇到了同样的错误。

我通过删除 DBContext 的 OnModelCreating 项目中的“builder.UseEncryption”行来修复它。

© www.soinside.com 2019 - 2024. All rights reserved.