Entity Framewok Code First "ADO.NET provider not found" with local SQL Server CE DLL's

entity framework code first migrations
entity framework code first existing database
entity framework code first create database if not exist
mvc entity framework code first sample
entity framework code first vs database first
entity framework code first connection string
entity framework code first net core
how to add new table in entity framework code first

I am writing a C# application which uses SQL Server CE 4.0 files, which are accessed through the Entity Framework 6.0 via code-first. (The application needs to be able to use local dll's for the SQL Server CE connection i.e. the application needs to be XCOPY deployable). The application runs fine on my development machine, but on other machines (e.g. VMs with just Win7 and .NET 4.0), I get an ArgumentException:

The ADO.NET provider with invariant name 'System.Data.SqlServerCe.4.0' is either not registered in the machine or application config file, or could not be loaded. See the inner exception for details.

The inner exception message says:

Unable to find the requested .Net Framework Data Provider. It may not be installed.

I have searched Google and SO and most of the comments indicate ensuring the App.config file is correct. I believe mine is (default connection factory and provider sections), but here are the contents:

<?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.0" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="System.Data.SqlServerCe.4.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" />
    </providers>
  </entityFramework>
</configuration>

The build folder includes the following files (in addition to the application-specific files, of course):

  • EntityFramework.dll
  • EntityFramework.xml
  • EntityFramework.SqlServer.dll
  • EntityFramework.SqlServer.xml
  • EntityFramework.SqlServerCompact.dll
  • EntityFramework.SqlServerCompact.xml

In each of the amd64 and x86 subfolders are the following files:

  • sqlceca40.dll
  • sqlcecompact40.dll
  • sqlceer40EN.dll
  • sqlceme40.dll
  • sqlceqp40.dll
  • sqlcese40.dll

I am certain the program runs on the development machine because SQL Server CE has been installed, but how do I get it to run using just local SQL Server CE dll's on other machines?

Code First to a New Database, https://docs.microsoft.com › › Getting Started with EF 6 using MVC 5 For more information, see Understanding Database Initializers in Entity Framework Code First. The application is now set up so that when you access the database for the first time in a given run of the application, Entity Framework compares the database to the model (your SchoolContext and entity classes). If there's a difference, the application drops and re-creates the database.

I was facing the same problem today. After reinstalling EF several times, what solved my problem was referencing EF in my Console project along with the DAL project (the one that actually uses EF).

If you're using a reference that in turn references EF, you gotta add it to this project as well.

Tutorial: Get Started with Entity Framework 6 Code First using MVC 5, In the Code-First approach, you focus on the domain of your application and start creating classes for your domain entity rather than design your database first  In Entity Framework, code first was introduced in Entity Framework 4.1. Code First modeling workflow targets a database that doesn't exist, and Code First will create it. Code-First APIs will create the database on the fly based on your entity classes and configuration. It can also update the database if the model changes, using a feature called Code First Migrations. Code First is a very popular approach and has full control over the code rather than database activity.

Sorry about the late response - actually, there's a really simple solution:

If you investigate the packages\EntityFramework.6.1.3\lib\net45 folder, you'll notice that there's another dll that's already in there - EntityFramework.SqlServer.

Simply add a reference to that, and everything will work.

What is Code-First?, Learn how Entity Framework Code-First approach works by creating a simple example in EF 6. Entity Framework, then, has a context that manages the interaction between those classes and your database. The context is not specific to Code First. It's an Entity Framework feature. Code First adds a model builder that inspects your classes that the context is managing, and then uses a set of rules or conventions

I had the same issue and nothing worked for me. The only thing that resolved my this issue for me was to uninstall SQL Server Compact from my machine (via add/remove programs) and re-install it.

Simple Code-First Example, NET applications, and the code-first approach using Entity Framework allows developers to use their domain model to build and query databases  Entity Framework Core Code First If you have used Entity Framework in the past, you will probably have heard about the Code First approach. Code First workflow begins with classes that describe the conceptual model and then Entity Framework generate a database from that model automatically.

In my case, "EntityFramework.SqlServerCompact" package was missing. Just wanted to share if in case it can save someone's day!

Code-First Database Design with Entity Framework and PostgreSQL , In this article we will see how a Code First Approach provides an alternative to the Database First and Model First approaches to the Entity Data  Code First Migrations. Code First Migrations is the recommended way to evolve your application's database schema if you are using the Code First workflow. Migrations provide a set of tools that allow: The following walkthrough will provide an overview Code First Migrations in Entity Framework.

Code First Approach in Entity Framework, Learn Entity Framework ef-code-first by example. Learn EF6 with interactive tutorial. Configure One-to-Many Relationships in EF 6 Here, we will learn how to configure One-to-Many relationships between two entities (domain classes) in Entity Framework 6.x using the code-first approach. Let's configure a one-to-many relationship between the following Student and Grade entities where there can be many students in one grade.

Code First, This post describes the very basic actions needed to setup a code first approach with Entity Framework (EF) and MySQL Database. For the  Entity Framework does not support collections of primitive types. You can either create an entity (which will be saved to a different table) or do some string processing to save your list as a string and populate the list after the entity is materialized.

Part 3 Entity Framework Code First Approach, The ForeignKey attribute is used to configure a foreign key in the relationship between two entities in EF 6 and EF Core. It overrides the default conventions. As per the default convention, EF makes a property as foreign key property when its name matches with the primary key property of a related entity. name: Name of the associated

Comments
  • See my blog post here: erikej.blogspot.dk/2013/11/…
  • ErikEJ: I missed your comment and went to the replies, but it looks like you have the answer as well. This looks like a complete tutorial for anyone starting from scratch.
  • @ErikEJ after upgrading to .net framework 4.5.2 the project breaks. p.s I downloaded your project and that gives the same error too
  • @Shekhar "Breaks" ?? - did you use my updated approach?
  • @ErikEJ no I didnot, looks like that might help. thanks
  • I went back and checked the references per Tico's comment (see my reply), which didn't work. Adding what you suggested to the App.Config file did fix it, but I think both were necessary (the linked article doesn't specify which assemblies need the references). For anyone wondering (I don't mess with the App.Config file much), this goes goes directly inside <configuration>.
  • I can confirm the comment above
  • I went back and checked this and added (via NuGet) EntityFramework and EntityFramework SQL Server Compact to each assembly. However, this didn't fix it. After I added to the App.Config file per nekno's comment, it worked. I think both are required, but I didn't go back and undo to be sure.
  • @Tim, I forgot about the App.config. You're absolutely right!
  • Commenting here on my behalf, again. This same thing happened to me again because I had to remove and re-install .NET Targetting Packs and it screwed up all my Visual Studio projects. Again, the only thing that worked was to uninstall SQL Server Compact and re-install it.