Postgresql, Entity Framework and Mono 3 - postgresql

I'm trying to get EF to work with Postgresql on a Linux platform. When I try to connect to the database I end up with this error: Failed to find or load the registered .Net Framework Data Provider 'Npgsql Data Provider'. My app.config file:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework"
type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework" />
</configSections>
<system.data>
<DbProviderFactories>
<remove invariant="Npgsql"></remove>
<add name="Npgsql Data Provider"
invariant="Npgsql"
description=".Net Framework Data Provider for Postgresql Server"
type="Npgsql.NpgsqlFactory, Npgsql, Version=4.0.0.0, Culture=neutral" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="MinDatabase" connectionString="Server=localhost;Port=5432;Database=postgres;User Id=postgres;Password=;CommandTimeout=20;"
providerName="Npgsql Data Provider" />
</connectionStrings>
</configuration>
How can I make Mono load the data provider?

The error message contains the invariant name, so its looking for something with invariant name "Npgsql Data Provider" and you specifically set the invariantName to Npgsql. So maybe try to change to use the same name all over your configuration like this:
<system.data>
<DbProviderFactories>
<remove invariant="Npgsql"></remove>
<add name="Npgsql"
invariant="Npgsql"
description=".Net Framework Data Provider for Postgresql Server"
type="Npgsql.NpgsqlFactory, Npgsql, Version=4.0.0.0, Culture=neutral" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="MinDatabase" connectionString="Server=localhost;Port=5432;Database=postgres;User Id=postgres;Password=;CommandTimeout=20;"
providerName="Npgsql" />
</connectionStrings>
Hope it works

Where did you download Npgsql from? If you are using Npgsql from official releases, your problem is the Version attribute of the assembly. Npgsql which supports EF 4.x has version 2.0.14.3 and Npgsql which supports EF 6 has version 2.1.0. None has version 4.0.0.0.
For more info about using Npgsql with Entity Framework, check out:
How to integrate PostgreSql with EntityFramework 6.0.2?
Entity Framework 6 with Npgsql
http://fxjr.blogspot.com.br/2014/02/using-entity-framework-6-with-npgsql-210.html
I hope it helps.

Related

cannot connect asp.net application to POSTGRESQL database using npgsql data provider

I am new to asp.net MVC with C# and am using POSTGRESQL for database. I have a problem connecting to the POSTGRESQL on localhost from asp.net application using Npgsql. I get the following error
The Entity Framework provider type 'Npgsql.NpgsqlServices, EntityFramework6.Npgsql' registered in the application config file for the ADO.NET provider with invariant name 'Npgsql' could not be loaded. Make sure that the assembly-qualified name is used and that the assembly is available to the running application.
My code in web.config file is
<connectionStrings>
<add name="DefaultConnectionString" connectionString="server=localhost; port=5432 ;user-id=postgres ;password=postgres ;database=postgres " providerName="Npgsql" />
</connectionStrings>
<system.data>
<DbProviderFactories>
<remove invariant="Npgsql"/>
<add name="Npgsql Data Provider" invariant="Npgsql" description=".Net Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" support="FF" />
</DbProviderFactories>
</system.data>
<entityFramework>
<defaultConnectionFactory type="Npgsql.NpgsqlConnectionFactory, Npgsql" />
<providers>
<provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, EntityFramework6.Npgsql" />
</providers>
</entityFramework>
NOTE: I am using VS 2012 ,postgreSQL 9.6(pgadmin3) and have installed Entity framework version 6.0.0 package

EF6 with Npgsql under Asp.net 5

Hi I am trying to use EF6 with npsql under Asp.net 5. I am using a simple console (asp.net5) for testing and a separate class lib (.net 4.5) for the data access as a simple test enviroment. Have installed EF6 using
nuget EntityFramework6.Npgsql. Have also removed .net core dependencies from project.json file.
The problem i keep on getting the following error.
An exception of type 'System.NotSupportedException' occurred in EntityFramework.dll but was not handled in user code
Additional information: Unable to determine the provider name for provider factory of type 'Npgsql.NpgsqlFactory'. Make sure that the ADO.NET provider is installed or registered in the application config.
It seems to have trouble with the provider name for 'Npgsql.NpgsqlFactory'. But the provider name in the configuration is set. May be it needs to be set when it was compiled. Any ideas?
the app.config file is as follows
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<entityFramework>
<providers>
<provider invariantName="Npgsql.NpgsqlFactory" type="Npgsql.NpgsqlServices, Npgsql.EntityFramework"></provider>
</providers>
<defaultConnectionFactory type="Npgsql.NpgsqlConnectionFactory, Npgsql" />
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="Npgsql" />
<add name="Npgsql" invariant="Npgsql" description=".Net Framework Data Provider for Postgresql" type="Npgsql.NpgsqlFactory, Npgsql" />
</DbProviderFactories>
</system.data>
</configuration>
Any help will be much appreciated. Many thanks.
You are missing the complete assembly information for npgsql in your configuration. Please, check this answer for more information about it and the complete information:
https://stackoverflow.com/a/35440114/246097
I hope it helps.

how to use EF6 with SQLite?

I have a project, I use nuget to install SQLite 1.0.93.0. This install EF6 and add the references to the project. Also update my app.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite" />
<!--<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />-->
<remove invariant="System.Data.SQLite.EF6" />
<add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".Net Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
</DbProviderFactories>
</system.data>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
</providers>
</entityFramework>
</configuration>
Then I create a new connection to my sqlite database and I try to create an edmx, but I get an error that says that my project has a reference to the newest version of EF but there is no a compatible provider for this connection to the database. If I have a a compatible provider I have to recompile the project, or if I have not a compatible provider I have to install it and recompile the project.
I try to recompile the project but the problem persists. I don't know how to install a compatible provider.
If in the references of the project I delete the references to EntityFramework.dll and EntityFramework.SQLserver.dll then in the wizard to create the edmx a have the option to choose between EF6.x and EF5. only have enabled the option to select EF5, so in this case I use EF5 and not EF6.
How can I use EF6 with SQLite?
Thanks.
Please see if my answer here works for you (be sure to watch the video) : Database first create entity framework 6.1.1 model using system.data.sqlite 1.0.93

How to create edmx avoiding sqlite-netFx45-setup-bundle-x86-2012-1.0.84.0.exe installation dependency

I have designed an app using EF6 and Sqlite. I had already downloaded EF6 and Sqlite for Windows Runtime (System.Data.Sqlite) from NuGet package installations. But as still Sqlite was not coming in the Provider list to generate Entity Framework model from db using its configuration dialog, I installed sqlite-netFx45-setup-bundle-x86-2012-1.0.84.0.exe from Sqlite.org. With the installation, Sqlite provider is added in the Provider list and using that my edmx file has been generated and the SSDL generated like this
<edmx:StorageModels>
<Schema Namespace="MyModel.Store" Alias="Self" Provider="System.Data.SQLite" ProviderManifestToken="ISO8601" xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl">
<EntityContainer Name="MyModelStoreContainer">..</EntityContainer>
<EntityType Name="XXX"></EntityType>
</Schema>
</edmx:StorageModels>
Other than this, every where in my project, I used all the assembly references localy(NuGet downloaded local assembly path) like this,
<Reference Include="EntityFramework">
<HintPath>.\packages\EntityFramework.6.0.2\lib\net40\EntityFramework.dll</HintPath>
</Reference>
<Reference Include="System.Data.SQLite">
<HintPath>.\packages\System.Data.SQLite.1.0.91.3\lib\net40\System.Data.SQLite.dll</HintPath>
</Reference>
<Reference Include="System.Data.SQLite.EF6">
<HintPath>.\packages\System.Data.SQLite.1.0.91.3\lib\net40\System.Data.SQLite.EF6.dll</HintPath>
</Reference>
after successful generation of my edmx and working properly with my application, I want to uninstall the sqlite-netFx45-setup-bundle from my pc to avoid any kind of dpendency(any assembly reference from GAC due to that installation) at deployment side.
But after the uninstallation, I get an error
Error 5 Error 175: The specified store provider cannot be found in the configuration, or is not valid. ..\EntityFramework\MyModel.edmx
It seems the error is pointing a missing GAC assembly reference for Sqlite provider at edmx storage model. My question is how can I remove the dependency of the that tool once my edmx is generated. Can it be resolved by adding any new assemly reference at the project or specific reference (how) to my existing local assembly (System.Data.Sqlite). Or any modification required at the app.config?
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"/>
<providers>
<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6"/>
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite"/>
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite"/>
<remove invariant="System.Data.SQLite.EF6"/>
<add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".Net Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6"/>
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="MyModelEntity" connectionString="metadata=res://*/EntityFramework.MyModel.csdl|res://*/EntityFramework.MyModel.ssdl|res://*/EntityFramework.MyModel.msl;provider=System.Data.SQLite;provider connection string="data source=.\Database\SqliteDB.db"" providerName="System.Data.EntityClient"/>
</connectionStrings>

Why would ADO.Net Entity Data Model Designer fails to open my EDMX file?

When trying to open the designer VS2010 complains that ...
Cannot load 'C:...\Model.edmx': Failed to find or load the registered .Net Framework Data Provider.
Now the thing is that I had previously created this database first model and the code successfully runs and does access the DataBase. I'm using SQLite v1.0.76.0 which I've installed and added to my References and have modified my App.Config as shown below
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite"/>
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.76.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139"/>
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="EDSEntities" connectionString="metadata=res://*/Model2.csdl|res://*/Model2.ssdl|res://*/Model2.msl;provider=System.Data.SQLite;provider connection string='data source="C:\EDS.db";foreign keys=true'" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
I am at a loss as to what the issue might be ... any ideas?
Reinstalling the SQLite .Net Provider resolved the issue.