目前我正在尝试在 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 造成的。如何确保所有内容都是最新文件,在重建应用程序之前我需要删除哪些构建项目?
nuget包之间存在版本不匹配的情况,将ef core包升级到7.0.0版本即可解决问题。
我的解决方案添加到.net core 7中:
Microsoft.EntityFrameworkCore.InMemory 版本=“7.0.4”
我的问题是我在处理 .Net 6 项目时使用 efcore 7.0。降级 efcore 以匹配 .Net 框架解决了这个问题。
EntityFrameworkCore 7.0.0 及以上的 NuGet 版本仅在安装了 NET 7.0 版本时才有效,因此在您的情况下,您必须再次更新到 6.0.13,这是迄今为止的最新版本。我遇到了同样的问题,所以我希望您能够通过安装 NET 7.0 或返回到旧的参考文献来最终解决它。
如果您的应用程序将 ASP.NET Core 运行状况检查与内存存储提供程序一起使用,则可能会产生对旧版本 EntityFrameworkCore 的依赖,而不是应用程序用于其主数据库连接的版本。
我在 .NET 8 中获取数据时遇到了同样的错误。
我通过删除 DBContext 的 OnModelCreating 项目中的“builder.UseEncryption”行来修复它。