一旦我用 one issue 解决了 IBM.EntityFrameworkCore ,另一个问题就出现了。 DB2 和他们的 .NET 团队的一切都非常艰难和痛苦......
问题:我在同一个 VS 解决方案中有几个基于 EntityFrameworkCore
的项目,例如 MyDb2EfModel
、 MyMsSqlEfModel
和 MyNpgsqlEfModel
。 (这是一个复杂的数据集成场景。)最重要的是,我有一个 CLI 项目,它引用所有三个并执行实际的数据操作。当 CLI 项目仅引用 MyDb2EfModel
项目时 - IBM.EntityFrameworkCore
按预期工作。但是一旦我添加了对其余两个项目的引用 - 它就会停止工作并抛出一些误导性的异常。发生异常是因为不再调用覆盖的 DbContext.OnConfiguring
和 DbContext.OnModelCreating
方法。当只有一个引用 ( MyDb2EfModel
) 时,方法会按预期调用,并且一切正常。但是引用了所有三个库项目 - 它们不再被调用。
我们还要注意,上述方法是在 DbContext
和 MyMsSqlEfModel
库中的 MyNpgsqlEfModel
实例上调用的。唯一停止工作的是 MyDb2EfModel
(基于 IBM.EntityFrameworkCore
)。
为 IBM 及其 .NET 团队点赞! 这些家伙让事情变得比任何其他数据库复杂 100 倍真是荒谬。
问题很明显:有没有人有类似情况的经验,希望有任何解决问题的建议?
谢谢!
最佳答案
我已经找到原因了。原来是关于Microsoft.EntityFrameworkCore
版本的。当前可用的 IBM.EntityFrameworkCore
版本是 1.1.1.101
(.NET Standard 1.6),它使用 Microsoft.EntityFrameworkCore
版本 1.1.1
或 1.1.2
。它 不能与 Microsoft.EntityFrameworkCore
版本 2.0.0
(.NET Standard 2.0) 一起使用 - 它抛出我得到的异常。
在其他两个库中,我使用了 Npgsql.EntityFrameworkCore.PostgreSQL
版本 2.0.0
和 Microsoft.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.2
和 2.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/