3

現在、MVC 4 と Entity Framework コードの最初のシナリオで Web アプリケーションを構築しています。

私のアプリケーションのメイン構造では、いくつかのクラスDbcontext(BlogDB)を管理する必要があります。Blogデータベースに必要なすべてのテーブルを作成したため、正常に機能します。次に、オンライン ストアをホストするエリアを作成しました。私の考えは、オンライン ストアのみに使用されるクラスを処理するために、個別DbContextの class( ) を作成することです。OnlineStoreDB

私の問題はOnlineStoreDB、エンティティフレームワークが起動されると、テーブルを作成しただけでなく、OnlineStore古いテーブルも削除したことです。

私の質問は次のとおりです。

  1. 古いテーブルを保持する方法を知っていますか?
  2. 1 つのアプリケーションで複数の EF コンテキスト クラスを正確に管理するにはどうすればよいですか?

コード:

public class BlogDB : DbContext
{
    public BlogDB ()
        : base("DBConnection")
    {
        Database.SetInitializer(new BlogInitializer());
    }

    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Author> Authors { get; set; }
    public DbSet<Comment> Comments { get; set; }
}

public class OnlineStoreDB : DbContext
{
    public OnlineStoreDB() :
        base("DbConnection")
    {
        Database.SetInitializer(new OnlineStoreInitializer());
    }

    public DbSet<Order> Orders { get; set; }
    public DbSet<Product> Products { get; set; }
    public DbSet<User> Users { get; set; }
}
4

2 に答える 2

3

ザビエル、コードファーストへようこそ!

はい、コード ファーストは非常に有望な素晴らしいアプローチでした。しかし今、あなたはキャッチを打った。データやおそらくスキーマを危険にさらすことなく、テーブルをインテリジェントに変更するスムーズな方法を思いついた、Microsoft 内 (または私が知る限り外部) には賢い頭脳はありません。

2 年前の実装戦略は、DB をドロップして再構築することでした。私たちの多くは SU にアクセスできず、足止めされていたので、これは耐えがたいことでした。

コードから最初に見つけたすべての利点について、私は最初に DB を好みます。データは簡単に保存できませんが、注釈はバディ クラスを介して保存できます。

Microsoft は、いくつかの巧妙な移行戦略を考え出しました。両方の記事を読むことを強くお勧めします。コード プロジェクト 2 番目:

1) http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-code-based-migrations-walkthrough.aspx

2) http://www.codeproject.com/Articles/504720/EntityplusFrameworkplusCodeplusFirstplusMigrations

Code-First を継続するかどうかにかかわらず、それらは啓発的なものになるはずです。私は批評家のように聞こえますが、一方の利点と他方の安定性の間で板挟みになっています。

最後に、2 つの dbcontext を保持する必要はないと思います。POCO は 1 つのコンテキストに統合する必要があります。

于 2013-01-23T03:52:04.120 に答える
1

テーブルを変更しないようにするには、両方の DBContext にテーブルのサブセットがある場合、初期化子を null に設定する必要があります。

しかし、1 つのデータベースに対して 2 つの DBContext を作成するポイントがわかりません。データベースで 2 セットのテーブル (ドメイン) を明確に分離できますか?

于 2013-01-23T03:50:22.077 に答える