IBM.EntityFrameworkCore - DbContext.OnConfiguring和DbContext.OnModelCreating未被调用

时间:2017-08-22 20:49:09

标签: db2 entity-framework-core

一旦我用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倍,这是荒谬的。

问题很明显:是否有人在类似情况下有任何经验,并希望有任何建议如何解决问题?

谢谢!

1 个答案:

答案 0 :(得分:3)

我找到了原因。原来它是关于Microsoft.EntityFrameworkCore版本的。当前可用的IBM.EntityFrameworkCore版本为1.1.1.101(.NET标准1.6),它使用Microsoft.EntityFrameworkCore版本1.1.11.1.2无法Microsoft.EntityFrameworkCore版本2.0.0(.NET标准版2.0)一起使用 - 它会抛出我遇到的异常。

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

因此,当我在CLI项目中仅引用2.0.0时,一切正常,因为只引用并使用了MyDb2EfModel版本Microsoft.EntityFrameworkCore。但是,只要我添加对另一个项目的引用,CLI就会在1.1.2版本Microsoft.EntityFrameworkCore1.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团队(与此特定问题无关)。