モジュールを作成できるように、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 のコードでテーブルを手動で作成する別の方法はありますか?