尝试创建新数据库时EF未创建身份表

时间:2018-11-29 11:22:32

标签: asp.net asp.net-mvc entity-framework ef-code-first ef-migrations

我有2个模型类:

  1. Customer.cs (名称和ID)
  2. Movies.cs (名称和ID)

我尝试运行enable-migrations,但出现此错误:

  

在程序集WebApplication2'中找不到上下文类型。

然后,我在网站上看到了一些答案,并告诉人们进行DBContext课程。我没有任何DBContext类,因为我刚刚创建了一个新的MVC项目。 因此,我尝试如下制作自己的DbContext类:

{
    public class MyDBContext:DbContext
    { 
        public void MyDbContext()
        {
        }
    }
}

然后我能够运行enable-migrtaions命令,并使用 configuration.cs 创建了Migration文件夹,如下所示:

internal sealed class Configuration : DbMigrationsConfiguration<WebApplication2.Models.MyDBContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
        }

        protected override void Seed(WebApplication2.Models.MyDBContext context)
        {
            //  This method will be called after migrating to the latest version.

            //  You can use the DbSet<T>.AddOrUpdate() helper extension method 
            //  to avoid creating duplicate seed data.
        }
    }
}

现在,当我运行add-migration Initialmodel时,Up()和Down()方法为空,并且没有Identity表。 请帮忙!

1 个答案:

答案 0 :(得分:1)

首先,我建议您参考使用Entity Framework创建一个新的MVC项目。有很多教程,但是这里是Microsoft的教程,它很准确而且很完整:

Get Started with Entity Framework 6 Code First using MVC 5

它还包括有关迁移的部分,但是,只有在数据库和模型发生变化时,才需要进行迁移。

在我们为迁移做好准备之前,我建议您退出迁移。瑞克·斯特拉尔(Rick Strahl)上有一篇很好的文章,介绍了如何将它们退回并恢复到干净状态:

Resetting Entity Framework Migrations to a clean State

最后,您的DbContext类必须具有一个DbSet。 DbSet类是可用于创建,读取,更新和删除操作的实体集。照原样使用DbContext类,实体框架不知道该怎么做或映射。

将DbContext类更改为以下内容:

{
public class MyDBContext:DbContext
{ 
    public void MyDbContext()
    {
    }

    public virtual DbSet<Movie> Movies {get; set;}
    public virtual DbSet<Customer> Customers {get; set;}
}

这将允许您(例如在Controller中)执行类似的操作以向数据库添加新客户:

var customer = new Customer { name = "John Smith" };
using(var context = new MyDbContext())
{
   context.Customers.Add(customer); // adds the customer to the DbSet in memory
   context.SaveChanges(); // commits the changes to the database
}

注意:我不建议在控制器中以这种方式创建DbContext,在将EF6与MVC 5结合使用的第一个链接中,有更好的方法。

希望有帮助。

相关问题