SQLite EF6 programmatically set connection string at runtime SQLite EF6 programmatically set connection string at runtime sqlite sqlite

SQLite EF6 programmatically set connection string at runtime


I was having the same problem. I found a workaround by using a different constructor from the base DbContext class:

public DbContext(DbConnection existingConnection, bool contextOwnsConnection);

Using this override you can pass an SQLiteConnection instead which you set the connection string on. So for example you can add a new constructor to your FirmwareContext.

public FirmwareContext(string connectionString)    : base(new SQLiteConnection() { ConnectionString = connectionString }, true){}

Or even

public FirmwareContext(string filename)    : base(new SQLiteConnection() { ConnectionString =            new SQLiteConnectionStringBuilder()                { DataSource = filename, ForeignKeys = true }            .ConnectionString }, true){}


After looking at this further it seems the problem is that there isn't a IDbConnectionFactory defined for SQLite. So another approach would be to define your own factory implementation.

public class SQLiteConnectionFactory : IDbConnectionFactory{    public DbConnection CreateConnection(string connectionString)    {        return new SQLiteConnection(connectionString);    }}

Then replace the defaultConnectionFactory entry in your 'app.config' with something like:

<defaultConnectionFactory type="MyDAL.SQLiteConnectionFactory, MyDAL" />


Normally the connection string in config would look like this

<add name="MuthootOneClientEntities" connectionString="metadata=res://*/LocalData.MuthootClientContext.csdl|res://*/LocalData.MuthootClientContext.ssdl|res://*/LocalData.MuthootClientContext.msl;provider=System.Data.SQLite;provider connection string="data source=D:\LocalRepo\trunk\dev\Muthoot.MuthootOne.API\src\Muthoot.MuthootOne.API.Services\LocalData\FD1CBA65-1B68-449F-8E6D-A652137466D4.db"" providerName="System.Data.EntityClient" />

change the above to following.(remove &quot ; to "") and mention it directly in entity context connection string with your own database location.

public partial class MuthootClientEntities : DbContext{    public MuthootClientEntities()        : base(@"metadata=res://*/LocalData.MuthootClientContext.csdl|res://*/LocalData.MuthootClientContext.ssdl|res://*/LocalData.MuthootClientContext.msl;provider=System.Data.SQLite;provider connection string=""data source=" + System.Environment.CurrentDirectory + @"\LocalData\FD1CBA65-1B68-449F-8E6D-A652137466D4.db""")            {        var test = System.Environment.CurrentDirectory;    }