0

モジュールを作成できるように、Asp.NET MVC フレームワークを拡張しようとしています。個別のミニ mvc-projects を作成し、それらを mvc-app に結合して、全体をビルド/インストールできるようにしたいと考えています。このようにして、目的のモジュールを 1 つのアプリケーションに選択できます。

ミニ MVC プロジェクトを作成するには、次の方法を使用します: http://www.wynia.org/wordpress/2008/12/aspnet-mvc-plugins/

今のところ、データベースを複数の dbcontexts で構築しようとしています。それを実現するために IRepository パターンを使用しました。まず、このパターンで Entity Framework (4.3) プロジェクトを作成し、OnModelCreating イベントで完全なデータベースを作成することができました。

public class Context : DbContext
    {
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            //    /* Use MEF to load all plugins. I'll use the mock interface IPlugin */

            List<IContext> Contexts = new List<IContext>();
            Contexts.Add(new BikeContext());
            Contexts.Add(new CarContext());
            Contexts.Equals(new BlogContext());


            foreach (IContext context in Contexts)
                context.Setup(modelBuilder);
        }   
    }

これは、セットアップを実行し、すべてのサブコンテキストにある関数の例です。

public class CarContext : Context, IContext
    {
        public List<Car> Cars { get; set; }

        void IContext.Setup(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Car>().ToTable("Cars");
            modelBuilder.Entity<Car>().HasKey(car => car.Id);               
        }
    }

このリポジトリは、MEF Plugins and EF CodeFirst - How?に記載されている例からのものです。

これを mvc アプリケーション (デフォルトで EF を使用しますよね?) で使用すると、OnModelCreating 関数が実行され、セットアップ関数も実行されますが、データベースもテーブルも作成されません。最後に、アプリがデータを選択しようとしたときにデータベースに接続できないため、エラーが発生します。データベースがないため、これは論理的です。

私が基本的に望んでいるのは、MVC アプリで mef-plugins-and-ef-codefirst ソリューションを使用することです。何か不足していますか?MVC/EF のコードでテーブルを手動で作成する別の方法はありますか?

4

1 に答える 1

0

さて、私は自分で解決策を見つけました:

これをコントローラーのインデックスに追加しました:

Context context = new Context();
            context.Database.CreateIfNotExists();

CarContext の public List を public DbSet に変更しました。

これでテーブルを含むデータベースが作成され、CarContext を介してデータを取得します。

于 2012-06-10T19:24:50.593 に答える