一旦我用 one issue 解决了 IBM.EntityFrameworkCore ,另一个问题就出现了。 DB2 和他们的 .NET 团队的一切都非常艰难和痛苦......

问题:我在同一个 VS 解决方案中有几个基于 EntityFrameworkCore 的项目,例如 MyDb2EfModelMyMsSqlEfModelMyNpgsqlEfModel 。 (这是一个复杂的数据集成场景。)最重要的是,我有一个 CLI 项目,它引用所有三个并执行实际的数据操作。当 CLI 项目仅引用 MyDb2EfModel 项目时 - IBM.EntityFrameworkCore 按预期工作。但是一旦我添加了对其余两个项目的引用 - 它就会停止工作并抛出一些误导性的异常。发生异常是因为不再调用覆盖的 DbContext.OnConfiguringDbContext.OnModelCreating 方法。当只有一个引用 ( MyDb2EfModel ) 时,方法会按预期调用,并且一切正常。但是引用了所有三个库项目 - 它们不再被调用。

我们还要注意,上述方法是在 DbContextMyMsSqlEfModel 库中的 MyNpgsqlEfModel 实例上调用的。唯一停止工作的是 MyDb2EfModel (基于 IBM.EntityFrameworkCore )。

为 IBM 及其 .NET 团队点赞! 这些家伙让事情变得比任何其他数据库复杂 100 倍真是荒谬。

问题很明显:有没有人有类似情况的经验,希望有任何解决问题的建议?

谢谢!

最佳答案

我已经找到原因了。原来是关于Microsoft.EntityFrameworkCore版本的。当前可用的 IBM.EntityFrameworkCore 版本是 1.1.1.101 (.NET Standard 1.6),它使用 Microsoft.EntityFrameworkCore 版本 1.1.11.1.2 。它 不能与 Microsoft.EntityFrameworkCore 版本 2.0.0 (.NET Standard 2.0) 一起使用 - 它抛出我得到的异常。

在其他两个库中,我使用了 Npgsql.EntityFrameworkCore.PostgreSQL 版本 2.0.0Microsoft.EntityFrameworkCore.SqlServer 版本 2.0.0 ,两者都取决于 Microsoft.EntityFrameworkCore 版本 2.0.0(均在 .NET Standard 2.0 中)。

因此,当我在 CLI 项目中仅引用 MyDb2EfModel 时,一切正常,因为仅引用和使用了 Microsoft.EntityFrameworkCore 版本 1.1.2。但是,一旦我添加对另一个项目的引用,CLI 就会依赖于 Microsoft.EntityFrameworkCore 版本 1.1.22.0.0 版本,并且会加载和使用较新的 ( 2.0.0 )。 IBM.EntityFrameworkCore 失败了,因为它无法使用它。

怎么解决?要么等待 .NET Standard 2.0 的 IBM.EntityFrameworkCore,要么降级其他引用以确保 Microsoft.EntityFrameworkCore 版本 2.0.0 不在任何地方使用(这会导致其他问题)。

因此,尽管这与 IBM.EntityFrameworkCore 中的错误无关,但 IBM DB2 .NET 团队仍应为没有发布 .NET Standard 2.0 至少预览版而受到责备,尽管 .NET Standard 2.0 现已可用近一年,最近已达到“发布”版本。还有更多事情要归咎于 IBM DB2 .NET 团队(与这个特定问题无关)。

关于db2 - IBM.EntityFrameworkCore - 未调用 DbContext.OnConfiguring 和 DbContext.OnModelCreating,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45826715/

10-12 06:06