5

たとえば、次の DbContext クラスがあります。

public class AppDbContext : DbContext {
    ...
}
public class LogDbContext : DbContext {
    ...
}
public class FooDbContext : DbContext {
    ...
}

という名前の接続文字列AppDbContextが にあり、App.Config他の DbContext クラスに と同じ接続文字列を共有させたい場合、とAppDbContextのパラメータとして文字列「AppDbContext」を渡すだけでよいでしょうか。例えば、ctorLogDbContextFooDbContext

public class FooDbContext : DbContext {
    public FooDbContext : base("AppDbContext") { }
}

副作用はありますか?

2013/1/9 更新

@ShinH2Sの提案と何かを試した後、私はこの方法をあきらめ、異なる接続文字列とデータベースを持つ異なるDbcontext派生クラスを与えることにしました。テスト プロジェクトを試して GitHub に配置しました。と のスキーマが異なるためAppDbContextにデータベース スキームが変更されたことをエンティティ フレームワークが検出すると、実行時例外がスローされます。FooDbContext両方の DbContext 派生クラスに戦略を割り当てるDropCreateDatabaseIfModelChangesと、モデルが別のクラスと異なるため、そのうちの 1 つが削除されます。

2017年10月更新

これは古い問題です。私の記憶でEF6 and above versionsは、同じ移行テーブル内の複数のコンテキストに対して異なる移行履歴を持つことができます。私は SO でこの答えを好みます。私は約 2 年間、C# でコーディングしていませんでした。

4

1 に答える 1

5

私見、副作用はありません。しかし、私であれば、DbContext クラスから継承する基本クラスを作成するだけでBaseDbContext、すべてのコンテキスト ( AppDbContextLogDbContextおよびFooDbContext) は から派生しBaseDbContextます。

于 2013-01-08T08:33:20.797 に答える