データベースは実行時にユーザーの選択に応じて異なるスキーマを持ちます。EF7またはEFコアで実行時にデータベーススキーマを変更する方法
私のコードは以下の通りです:テスト時
public partial class FashionContext : DbContext
{
private string _schema;
public FashionContext(string schema) : base()
{
_schema = schema;
}
public virtual DbSet<Style> Styles { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
options.UseSqlServer(@"Server=.\sqlexpress;Database=inforfashionplm;Trusted_Connection=True;");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Style>()
.ToTable("Style", schema: _schema);
}
}
。私は 'schema1'でコンテキストインスタンスを作成しました。 これまでのところとても良いです。
しかし、別のスキーマ 'schema2'を持つ別のコンテキストインスタンスを作成すると、スキーマがまだ 'schema1'になっている結果のデータです。ここで
は実装です:
using (var db = new FashionContext("schema1"))
{
foreach (var style in db.Styles)
{
Console.WriteLine(style.Name);
}
}
Console.ReadLine();
Console.Clear();
using (var db = new FashionContext("schema2"))
{
foreach (var style in db.Styles)
{
Console.WriteLine(style.Name);
}
}
Console.ReadLine();
後、私はOnModelCreatingは一度だけ呼ばれていることに気づいたので、あなたは、同じ接続文字列の新しいコンテキスト・インスタンスを作成するときに、それが再び呼び出されることはありません。
実行時に動的スキーマを使用することはできますか?注:これはEF6で可能です
この質問はEF Coreについてですが、あなたの答えはEF6です。それはおそらくそれがdownvoted得た理由です。 – bricelam