Entity framework 6 without config file?



I have an application that can not use a config file and has to set up the connectionstring for the entity context by code (with EntityConnectionStringBuilder).

The problem comes however with this:

No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient'.

Since I can not use the standard app.config file, am I screwed in EF6? It was not a problem in EF4 if I recall correctly. So the settings inside the entityFramework-tag is something I wish to set in code.

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
    <parameter value="v11.0" />
  <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
8/15/2018 2:03:03 PM

Accepted Answer

I'm using EF 6 without an App.config file at all I just pass a connection string to my DBContext (well the connection is read out of a config file elsewhere but that's up to you). Just Remove all the EF stuff from the config file.

Here's how I got it to work.

public partial class MyDbContext : DbContext, IMyDbContext
    public MyDbContext(string connectionString,
                                         DbValidationMode validationMode = DbValidationMode.Enabled,
                                         DbLazyLoadingMode lazyLoadingMode = DbLazyLoadingMode.Disabled,
                                         DbAutoDetectMode autoDetectMode = DbAutoDetectMode.Enabled)
            : base(((EntityConnectionStringBuilder)new EntityConnectionStringBuilder()
                Provider = "System.Data.SqlClient",
                ProviderConnectionString = connectionString,
                Metadata = @"res://*/Contexts.Test.MyModel.csdl|res://*/Contexts.Test.MyModel.ssdl|res://*/Contexts.Test.MyModel.msl"
                    this.Configuration.ValidateOnSaveEnabled = validationMode.Equals(DbValidationMode.Enabled);
                    this.Configuration.LazyLoadingEnabled = lazyLoadingMode.Equals(DbLazyLoadingMode.Enabled);
                    this.Configuration.AutoDetectChangesEnabled = autoDetectMode.Equals(DbAutoDetectMode.Enabled);
... Etc  

Then I just inject this context into all my services.

I'm using Database First design so I found it easier to modify the T4 Templates.

There may be nicer ways of doing this but I've not ran into any problems at all.

3/20/2014 4:34:20 PM

Popular Answer

In EF6 you can use Code-based Configuration for Entity Framework specific setup. (Also see How to add entity framework 6 provider in code?). Then you can build connection string and pass it to the ctor of the context.

Related Questions


Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow