How to establish a connection in Entity Framework 6 using code-based configuration

I'm a little confused by the (sparse) MSDN documentation on configuration based on EF6 code. I have a WPF application that needs to create an SQL connection based on command line parameters and / or user input from a dialog box. In older versions of EF, I accomplished this by building a connection string and passing it to my derived DbContext each time.

It would be nice if I could avoid this, because it also means that you need to pass a connection string for each view model that should use context. It seems that DbConfig in EF6 is on its way. Based on the documents, I created a custom class that looks something like this:

public class EfConfiguration: DbConfiguration
{
    public EfConfiguration() 
    { 
        SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy()); 
        SetDefaultConnectionFactory(new SqlConnectionFactory());
        SetDatabaseInitializer<DataContext>(null);
    } 
}

, , EF - . : ? , DbContext ?

+4
2

- , :

DbContext , . , DbContext ( Entities ) , :

    public Entities(IConnectionHelper connHelper)
        :base(connHelper.GetConnection(), true)
    { }

IConnectionHelper - , /db/uname/pw SqlConnectionStringBuilder. singleton, , , , . GetConnection() factory:

            SqlConnectionFactory connFactory = new SqlConnectionFactory(_connectionString);
            return connFactory.CreateConnection(_connectionSettings.Database);

_connectionString - , , _connectionSettings - POCO, .

, DbContext, factory, IConnectionHelper, :

    public EntitiesFactory(IConnectionHelper connHelper)
    {
        _connHelper = connHelper;
    }

    public Entities Create()
    {
        return new Entities(_connHelper);
    }

factory , , :

using (var db = _entitiesFactory.Create())
{ ... }

factory , , .

+1

googling, DBContext contructor, , :)

Easy Peasy

0

Source: https://habr.com/ru/post/1527785/


All Articles