0

WPF と Entity Framework CodeFirst でアプリケーションを開発しています。
要件の 1 つは、ユーザーが新しいプロジェクトごとに個別のデータベース ファイルを作成できることです。
DbContext :

public class TestContext : DbContext, IUnitOfWork
{
    public TestContext()
        : base("TestContext")
    {
    }

    #region Implementation of IUnitOfWork

    public new IDbSet<TEntity> Set<TEntity>() where TEntity : class
    {
        return base.Set<TEntity>();
    }

    #endregion Implementation of IUnitOfWork

    public DbSet<Destination> Destinations { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new DestinationMap());
    }

app config で定義された接続文字列:

<connectionStrings>
    <clear />
    <add name="TestContext" providerName="System.Data.SqlClient" connectionString="Server=.\sqlexpress;Database=databaseName;Integrated Security=True;Connect Timeout=300;MultipleActiveResultSets=true;" />
</connectionStrings>


StructureMap を使用して IUnitOfWork インターフェイスに DbContext を挿入し、リクエスト パターンごとにコンテキストを実装しました。これは StructureMap 構成です:

ObjectFactory.Initialize(x => x.Scan(scanner =>
{                                       
    x.For<IUnitOfWork>().CacheBy(InstanceScope.Hybrid).Use<SpitfireContext>();
}));

ユーザーが新しいプロジェクトを作成するときに、接続文字列を変更して、アプリケーションに新しいプロジェクトのデータベースを強制的に作成しようとします。

public static void ChangeDatabase(Guid guid)
{
    var sqlConnectionStringBuilder =
        new SqlConnectionStringBuilder(ConfigHelper.ActiveConnection);
    sqlConnectionStringBuilder["Database"] = guid.ToString();
    ConfigHelper.ActiveConnection = sqlConnectionStringBuilder.ToString();
    Database.DefaultConnectionFactory =
        new System.Data.Entity.Infrastructure.SqlConnectionFactory(ConfigHelper.ActiveConnectionString());

    Database.SetInitializer(
        new MigrateDatabaseToLatestVersion<TestContext, MigrationConfiguration>());
    using (var context = new TestContext())
    {
        context.Database.Initialize(true);
    }
}

アプリケーションは最初のプロジェクトのデータベースを作成し、その後、プレビュー データベースの移行を試みます。
コードで DbConext オブジェクトを直接作成しないため、接続文字列をそのコンストラクターに渡すことができません。
私の問題に対して何を提案しますか?
私のコードの何が問題になっていますか?

4

2 に答える 2