【问题标题】:Entity Framework | Sequence contains more than one matching element实体框架 |序列包含多个匹配元素
【发布时间】:2021-09-18 16:07:02
【问题描述】:

我使用了数据库优先的方法。 该模型是正确的(或者至少看起来像) 但我总是得到这个错误。拜托,我已经尝试了很多东西.. 我的程序的完整代码(甚至是我创建数据库的 sql 脚本) 在这里:https://github.com/AntonioParroni/test-task-for-backend-stack/blob/main/Server/Models/ApplicationContext.cs

因为我有一个 mac。我使用 dotnet ef cli 命令(dbcontext 脚手架)创建了我的模型 我可以使用我的上下文。但我不能触摸任何 DbSet..

public static void Main(string[] args)
    {
        using (ApplicationContext context = new ApplicationContext())
        {
            Console.WriteLine(context.Database.CanConnect());
            var months = context.Months.ToList();
            foreach (var month in months)
            {
                Console.WriteLine(month.MonthName);
            }
        }
        //CreateHostBuilder(args).Build().Run();
    }

这不是我第一次使用 EF。在许多简单的项目或任务中,一切都运行良好。在这里....不管我做什么(我什至尝试重命名我的所有列名,删除除一个之外的所有表,修改上下文代码,在一个新的、完全空的项目..) 它总是..

Unhandled exception. System.TypeInitializationException: The type initializer for 'Microsoft.EntityFrameworkCore.Query.Internal.NavigationExpandingExpressionVisitor' threw an exception.
 ---> System.TypeInitializationException: The type initializer for 'Microsoft.EntityFrameworkCore.Query.QueryableMethods' threw an exception.
     ---> System.InvalidOperationException: Sequence contains more than one matching element
       at System.Linq.ThrowHelper.ThrowMoreThanOneMatchException() in System.Linq.dll:token 0x600041c+0xa
ect....

这是我的包参考文件

"restore":{"projectUniqueName":"/Users/mac/Documents/GitHub/test-task-for-backend-stack/Server/Server.csproj",
    "projectName":"Server","projectPath":"/Users/mac/Documents/GitHub/test-task-for-backend-stack/Server/Server.csproj",
    "outputPath":"/Users/mac/Documents/GitHub/test-task-for-backend-stack/Server/obj/","projectStyle":
    "PackageReference","originalTargetFrameworks":["net6.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},
    "frameworks":{"net6.0":{"targetAlias":"net6.0","projectReferences":{}}},
    "warningProperties":{"warnAsError":["NU1605"]}}"frameworks":{"net6.0":
        {"targetAlias":"net6.0","dependencies":{"EntityFramework":
            {"target":"Package","version":"[6.4.4, )"},
            "Microsoft.EntityFrameworkCore.Design":{"include":"Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive",
            "suppressParent":"All","target":"Package","version":"[5.0.0, )"},
            "Microsoft.EntityFrameworkCore.SqlServer":{"target":"Package","version":"[5.0.0, )"},
            "Swashbuckle.AspNetCore":{"target":"Package","version":"[5.6.3, )"}},
            "imports":["net461","net462","net47","net471","net472","net48"],
            "assetTargetFallback":true,"warn":true,
            "frameworkReferences":{"Microsoft.AspNetCore.App":{"privateAssets":"none"},
            "Microsoft.NETCore.App":{"privateAssets":"all"}},
        "runtimeIdentifierGraphPath":"/usr/local/share/dotnet/sdk/6.0.100-preview.6.21355.2/RuntimeIdentifierGraph.json"}}

已经好几天了。我变得非常困惑和疯狂。 为什么会发生这种情况..以及为什么互联网上没有太多关于此类错误的信息。请给我指出正确的方向..

【问题讨论】:

  • 所以你的意思是即使new ApplicationContext().Months.First() 也会抛出错误?
  • @CaiusJard 是的,当然。每次访问上下文中的 DbSet 都会引发此错误...

标签: c# sql-server entity-framework orm


【解决方案1】:

您有 net6.0 target framework,但尚未发布,而您已安装 EF6,它是以前的迭代实体框架(主要用于旧版 .NET Framework 项目),并且您还拥有 EF Core(它的现代迭代)但旧版本 - 5.0(您实际用于您的上下文,请参阅那里的 using Microsoft.EntityFrameworkCore; 语句)。

尝试删除EntityFramework 包并安装Microsoft.EntityFrameworkCore.SqlServer 的预览版(也可能只是更新到最新的5 版本也有帮助),然后完全删除或安装Microsoft.EntityFrameworkCore.Design 的预览版。 (另外我建议将您的 SDK 更新为 rc 并安装 rc 版本的软件包)。

或者尝试删除对EntityFramework(不是Core one)的引用并将目标框架更改为net5.0(如果你的机器上安装了它)。

至于为什么你会看到这个异常 - 我猜它与添加到 .NET 6 中 Queryable 的新方法有关,这导致 this 检查之一失败。

TL;DR

如 cmets 中所述 - 将 EF Core 更新到相应的最新版本(适用于 5.0 和 3.1)或更新到 .NET 6.0 和 EF Core 6。

【讨论】:

  • 嗯......我按照你说的做了一切(并且还重新生成了我的模型)嗯......现在我遇到了另一个错误。至少是一些东西。无法添加导航“”,因为它以无密钥实体类型“RegistrationCountByDevicesAndMonth”为目标。导航只能针对带有键的实体类型。 Blah blah blah ...我要为所有表格添加一些键(是的,强制的良好做法)谢谢。我对所有这些 .NET 版本、框架、核心、实体都感到很困惑......啊......
  • 嗯...用您提到的 5.0.10 版本的软件包修复了它。至少.. 呵呵
  • 我使用的是 .net 6.0 框架和 .efcore 5.0.4 并得到了同样的错误。我将我的项目支持到 5.0 并摆脱了异常
  • 我使用的是 3.1.10 EF Core 和 netcore3.1 应用程序。更新到 3.1.21 修复了它
  • 感谢您的解释。我将 .NET 5 项目更新为 .NET 6 并出现了 EF 错误。当我将所有 NuGet 包更新到最新的 .NET 6 版本时,它修复了它。
猜你喜欢
  • 2017-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多