我有2个模型类:
我尝试运行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表。 请帮忙!
答案 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结合使用的第一个链接中,有更好的方法。
希望有帮助。