かなりわかりません。
開発目的で、テーブルに異なるスキーマを使用できます。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("applicationX");
}
これが不可能な場合は、エンティティの接尾辞/接頭辞テーブル名を付けることができます。
両方のアプリケーションで共有テーブル(データ)が必要な場合は、同じモデル構築コードを共有するすべてのアプリケーションですべてのデータベースを作成できます。
もちろん、あなたのデータベースレクリエーションコード(https://github.com/aspnet/EntityFramework/issues/3042)の "クリティカルセクション"を何らかの方法で作成し、ミューテックスまたは/およびそれを組み合わせて使用する必要があります。データベース内に独自のロック同期オブジェクト(テーブル)があります。
あなたが動的モデル(データベース)を構築する必要がある場合は、例えば、単一のDBコンテキストに動的モデルを構築するために依存性の注入を使用します。もちろん
/// <summary>
/// Formalization of entity framework DbContext model creation <see cref="DbContext.OnModelCreating"/>
/// </summary>
/// <remarks>
/// The reason for this explicit interface of the <see cref="DbContext.OnModelCreating"/> is to make compositions of several model builders into one
/// </remarks>
public interface IEntityFrameworkModelBuilder
{
void BuildModel(ModelBuilder modelBuilder);
}
public abstract class DbContextBase : DbContext
{
protected DbContextBase(DbContextOptions options, IEntityFrameworkModelBuilder modelBuilder) : base(options)
{
_modelBuilder = modelBuilder;
}
public virtual IEntityFrameworkModelBuilder ModelBuilder
{
get { return _modelBuilder ?? (_modelBuilder = new DefaultSchemaEntityFrameworkModelBuilder("dbo")); }
protected set { _modelBuilder = value; }
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
ModelBuilder.BuildModel(modelBuilder);
}
}
を、あなたは、例えば作成することができますあなたのIEntityFrameworkModelBuilder用コンポジットパターンクラス:
/// <summary>
/// The composition of <see cref="IEntityFrameworkModelBuilder"/> used to construct <see cref="DbContext"/> model creation from several modules (tests).
/// </summary>
/// <seealso cref="DbContextOnModelCreatingAdaptingModelBuilder"/>
public class EntityFrameworkModelBuilderComposition : IEntityFrameworkModelBuilder, IList<IEntityFrameworkModelBuilder>
{
private readonly IList<IEntityFrameworkModelBuilder> _builders;
public EntityFrameworkModelBuilderComposition() : this(new IEntityFrameworkModelBuilder[0])
{}
public EntityFrameworkModelBuilderComposition(params IEntityFrameworkModelBuilder[] builders)
{
_builders = new List<IEntityFrameworkModelBuilder>(builders);
}
/// <summary>
/// Constructor to take list of builders as underlaying list so it is initialized with these builders and sharing the same reference.
/// </summary>
/// <param name="builders"></param>
public EntityFrameworkModelBuilderComposition(IList<IEntityFrameworkModelBuilder> builders)
{
_builders = builders ?? new List<IEntityFrameworkModelBuilder>();
}
public virtual void BuildModel(ModelBuilder modelBuilder)
{
foreach (var b in _builders)
{
b.BuildModel(modelBuilder);
}
}
}
はちょうどあなたが、遅かれ早かれ有用見つけることができるものを、追加:もちろん
/// <summary>
/// The <see cref="IEntityFrameworkModelBuilder"/> implementation of a building model on the base of <see cref="DbContext"/> instance calling its <see cref="DbContext.OnModelCreating"/> protected method.
/// </summary>
/// <seealso cref="DbContextOnModelCreatingAdaptingModelBuilder"/>
/// <seealso cref="EntityFrameworkModelBuilderComposition"/>
public class DbContextOnModelCreatingAdaptingModelBuilder : IEntityFrameworkModelBuilder
{
private readonly Func<DbContext> _dbContextFactoryMethod;
public DbContextOnModelCreatingAdaptingModelBuilder(Func<DbContext> dbContextFactoryMethod)
{
_dbContextFactoryMethod = dbContextFactoryMethod;
}
public void BuildModel(ModelBuilder modelBuilder)
{
using (var dbContext = _dbContextFactoryMethod())
{
MethodInfo onModelCreating = dbContext.GetType().GetMethod("OnModelCreating", BindingFlags.NonPublic | BindingFlags.Instance);
onModelCreating.Invoke(dbContext, new object[] {modelBuilder});
}
}
}
、すべての上記のポイントは/目的の動作を取得するために結合されなければならないことができます。しかし、それは正確に
ドロップに関して何を意味するのか
私のモデルは、私はこのドロップを必要と
を再現した場所に十分有意に変化し、あなたがモデルの違いを評価するか、はっきりしていないとお互いにステップを作り直してください。何度もテーブルが欠けています
あなたはアプリケーションのリサイクルごとにデータベースを削除して再作成しますか? ! – DavidG
私は英語でそれを書いていませんでしたか?はい、私たちは開発の「急速な変化」段階にあります。 –
あなたはそれが開発であるとは言わなかった、それは狂った生産であることを暗示した。 – DavidG