I am using Steeltoe.CloudFoundry.Connector.EFCore with Npgsql.EntityFrameworkCore.PostgreSQL. I want to migrate the application to .NET 5.0. After updating Npgsql to 5.0.2 I am getting the error 'Unable to find DbContextOptionsBuilder, are you missing a PostgreSql EntityFramework Core assembly?' when adding DBContext.
I tried to look at the available versions of Steeltoe, but the highest NuGet I see is 2.5.2, which gives me this error as well as the older I had (2.4.4).
Is there any version combination of those libraries that works?
The name of that Steeltoe package changed in 3.0, you'll be needing Steeltoe.Connector.EFCore going forward.
The name of that particular type inside Npgsql.EntityFrameworkCore.PostgreSQL changed in 5.0, so that's what is preventing Steeltoe from finding it. The fix has also been applied to the 2.x branch and is included in version 2.5.3.
Check the Steeltoe Samples repo for both 2.x and 3.x versions
Related
I have a multi-project solution that contains a data layer on .Net Standard 2.1 and a WebAPI on .Net Core 3.1. Currently, I have no plans to upgrade to .Net 5.x (Note: Core is removed in 5.x naming convention) because it is not LTS - that will be .Net 6.x. So, I will upgrade to 6.x when it comes out.
In one of my data layer solutions, the NuGet Package Manager is recommending that I upgrade Microsoft.AspNetCore.Identity.EntityFrameWorkCore from v3.1.8 to v5.0.2. It seems like the major version is moving in lockstep with the .Net major version (Note: 4.x is skipped in order to avoid confusion with the venerable .Net Framework 4.x). Should I follow the advice and upgrade?
Specifically, will this cause any problems with the .Net Core 3.1 WebAPI project? Generally, can I do this for other Microsoft.* packages that recommend upgrading to a 5.x version?
I bit the bullet and upgraded all of them. Everything works flawlessly and I am glad that I did it. There were a few breaking changes that needed to be dealt with. I recommend checking Microsoft's breaking change log here:
https://learn.microsoft.com/en-us/aspnet/core/migration/31-to-50?view=aspnetcore-5.0&tabs=visual-studio
Does Microsoft EntityFrameworkCore work with standard .Net Framework applications?
I read a couple posts which said it was possible to.
However, when attempting to install via NuGet Package Manager, I get the following error message:
Could not install package "Microsoft.EntityFrameworkCore.Design
5.0.0". You are trying to install this package into a project that targets ".NetFramework, Version=v4.7.2', but the package does not
contain any assembly references or content files that are compatible
with that framework.
Is there something I'm doing wrong, or is EntityFrameworkCore not intended for use with standard .NetFramework applications?
Sorry, I have to correct my answer, I was wrong. EF Core 3.1 can be used with .NET Framework 4.7.2 or later.
EF Core 5.0 cannot be used with .NET Framework 4.7.2
see https://learn.microsoft.com/en-ca/ef/core/miscellaneous/platforms
I also tried it before and got the same error message described above
As soon as I've solved one issue with IBM.EntityFrameworkCore, another one has arose. Everything is soooo hard and painful with DB2 and their .NET team...
The problem: I have several EntityFrameworkCore - based projects in the same VS solution, for example MyDb2EfModel, MyMsSqlEfModel, and MyNpgsqlEfModel. (It's kind of a complex data-integration scenario.) On top of that I have a CLI project which references all the three and performs actual data ops. When the CLI project references only MyDb2EfModel project - IBM.EntityFrameworkCore works as expected. But as soon as I add references to the remaining two projects - it simply stops working and throws some misleading exception. The exception happens because overridden DbContext.OnConfiguring and DbContext.OnModelCreating methods aren't called anymore. When there's only one reference (MyDb2EfModel) the methods get called as expected, and everything works. But with all three library projects referenced - they aren't called anymore.
Let's also note that the mentioned methods get called on DbContext instances from MyMsSqlEfModel and MyNpgsqlEfModel libraries. The only one that stops working is MyDb2EfModel (which is based on IBM.EntityFrameworkCore).
Thumbs down for IBM and their .NET team! It's ridiculous how these guys are making things be 100 times more complicated then with any other DB.
The question is obvious: Does anyone has any experience in a similar scenario, and hopefully any suggestion how to resolve the issue?
Thanks!
I've found the reason. It turned out that it's about Microsoft.EntityFrameworkCore version. Currently available version of IBM.EntityFrameworkCore is 1.1.1.101 (.NET Standard 1.6), and it uses Microsoft.EntityFrameworkCore version 1.1.1 or 1.1.2. It cannot be used with Microsoft.EntityFrameworkCore version 2.0.0 (.NET Standard 2.0) - it throws the exception I was getting.
In the other two libraries I've used Npgsql.EntityFrameworkCore.PostgreSQL version 2.0.0 and Microsoft.EntityFrameworkCore.SqlServer version 2.0.0, both depending on Microsoft.EntityFrameworkCore version 2.0.0 (all in .NET Standard 2.0).
So when I referenced only MyDb2EfModel in my CLI project everything was working because only Microsoft.EntityFrameworkCore version 1.1.2 is referenced and used. But as soon as I add reference to another projects CLI ends up with dependencies on both Microsoft.EntityFrameworkCore version 1.1.2 and 2.0.0 versions, and the newer (2.0.0) is loaded and used. And IBM.EntityFrameworkCore was failing because it cannot use it.
How to solve? Either wait for IBM.EntityFrameworkCore for .NET Standard 2.0, or downgrade other references to ensure that Microsoft.EntityFrameworkCore version 2.0.0 isn't used anywhere (which will cause other headaches).
So although it's not about a bug in IBM.EntityFrameworkCore, IBM DB2 .NET team is still to blame for not having .NET Standard 2.0 at least preview published, although .NET Standard 2.0 is available for almost a year now, recently reaching its "release" version. And there are more things to blame IBM DB2 .NET team for (unrelated to this particular issue).
I'm using nppgsql 2.2.x version for 1 year but yesterday I tried to use 3.0.5.
I added reference to new library and all Database extraction run perfect but I found big problem with Majorsilence Reporting. No report will appear.
When using version 2.2.x all reports run.
Now I run on 4.0 framework and I read that it is not possible to use a framework little then 4.5 (but it run on 4.0!).
What could be the problem in your mind? Could it be the target framework?
Could it be some changes in 3.x version?
Do you have any ideas? I don't want to use 2.2.x version forever.
Thanks
Sorry. .. npgsql want 4.5 .net And majorsilence run on 4.0
downloading new version of npgsql i could See is not compiled old mono.security dll file. Is Not needed in newest version? I have not to ad any reference to this library if i use 3x version?
Thanks.
You're correct - Mono.Security.dll is no longer needed in Npgsql 3.x. You don't need to add any reference to any external library in order to use Npgsql 3.x.