0

我正在尝试扩展 Asp.NET MVC 框架,以便制作模块。我希望能够制作单独的迷你 mvc 项目,将它们组合在 mvc-app 中并构建/安装整个东西。这样,我可以将所需的模块选择到一个应用程序中。

要制作迷你 MVC 项目,我想使用这种方法:http ://www.wynia.org/wordpress/2008/12/aspnet-mvc-plugins/

现在我正在尝试使用多个 dbcontexts 构建数据库。我使用 IRepository 模式来实现这一点。首先,我使用这种模式创建了一个实体框架 (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 和 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 回答