Как использовать строку динамического соединения, используя подход Model First, но все же использовать модель данных в EDMX?

Я создал EDMX, используя EF 5 с подходом Model First, то есть я начал с пустого дизайнера и смоделировал свои сущности. Теперь я хочу иметь возможность использовать эту модель, определенную в EDMX, но предоставлять строки подключения SQL Server во время выполнения без изменения файла конфигурации.

Я знаю, как передать строку подключения в DbContext, но проблема заключается в поиске метаданных для сопоставлений в сборке.

Например, мой EDMX имеет эту строку подключения в app.config


Часть, которую мне не хватает, это"metadata=res://*/Data.DataContext.EntityFramework.MesSystem.csdl|res://*/Data.DataContext.EntityFramework.MesSystem.ssdl|res://*/Data.DataContext.EntityFramework.MesSystem.msl;"

Я хочу быть в состоянии создатьDbContext программно передавая строку подключения SQL Server, но "добавить" часть метаданных.

Это то, что я хотел бы генерировать с помощью файла T4 ...

public partial class MesSystemEntities : DbContext
{
    public MesSystemEntities()
        : base("name=MesSystemEntities")
    {
    }

    public MesSystemEntities(string sqlServerConnectionString)
        : base(GetEfConnectionString(sqlServerConnectionString))
    {    
    }

    private string GetEfConnectionString(string sqlServerConnectionString)
    {
       // values added by T4 generation
       string format = "metadata=res://*/Data.DataContext.EntityFramework.MesSystem.csdl|res://*/Data.DataContext.EntityFramework.MesSystem.ssdl|res://*/Data.DataContext.EntityFramework.MesSystem.msl;;provider=System.Data.SqlClient;provider connection string=\"{0}\"";    
       return String.Format(format, sqlServerConnectionString);
    }
...
}

У меня вопрос, как я могу получить метаданные, которые мне нужны, в файле генерации T4, чтобы создать соединение Entity Framework без жесткого кодирования для каждого файла EDMX?

ИЛИ ЖЕ

Есть ли более простой способ загрузить метаданные из сборки программно?

Ответы на вопрос(1)

Ваш ответ на вопрос