一旦我用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倍,这是荒谬的。
问题很明显:是否有人在类似情况下有任何经验,并希望有任何建议如何解决问题?
谢谢!
答案 0 :(得分:3)
我找到了原因。原来它是关于Microsoft.EntityFrameworkCore
版本的。当前可用的IBM.EntityFrameworkCore
版本为1.1.1.101
(.NET标准1.6),它使用Microsoft.EntityFrameworkCore
版本1.1.1
或1.1.2
。 无法与Microsoft.EntityFrameworkCore
版本2.0.0
(.NET标准版2.0)一起使用 - 它会抛出我遇到的异常。
在其他两个库中,我使用了Npgsql.EntityFrameworkCore.PostgreSQL
版本2.0.0
和Microsoft.EntityFrameworkCore.SqlServer
版本2.0.0
,两者都取决于Microsoft.EntityFrameworkCore
版本{{1 (全部在.NET Standard 2.0中)。
因此,当我在CLI项目中仅引用2.0.0
时,一切正常,因为只引用并使用了MyDb2EfModel
版本Microsoft.EntityFrameworkCore
。但是,只要我添加对另一个项目的引用,CLI就会在1.1.2
版本Microsoft.EntityFrameworkCore
和1.1.2
版本上产生依赖关系,并且会加载和使用较新的(2.0.0
) 。 2.0.0
失败了,因为它无法使用它。
如何解决?要么等待IBM.EntityFrameworkCore
for .NET Standard 2.0,要么降级其他引用以确保IBM.EntityFrameworkCore
版本Microsoft.EntityFrameworkCore
不会在任何地方使用(这会引起其他麻烦)。
因此,虽然它不是2.0.0
中的错误,但IBM DB2 .NET团队仍然应该归咎于没有.NET Standard 2.0至少预览发布,尽管.NET Standard 2.0可用于差不多一年了,最近刚刚发布"发布"版。还有更多的事情要归咎于IBM DB2 .NET团队(与此特定问题无关)。