迁移ASP NET MVC5

时间:2014-06-13 00:07:37

标签: c# asp.net entity-framework asp.net-mvc-5 entity-framework-6

我创建了我的项目并配置了用户实体。

我在项目中启用了迁移功能。为了测试这个,我简单地添加了一个用户,然后通过浏览器登录到ASP .NET应用程序。一切都很好。

我添加了几个实体及其对应的DbSet<T>。我创建了一个控制器来管理这些实体。

我使用这种种子方法前往Update-Database

var manager = new UserManager<ChevieUser>(new UserStore<ChevieUser>(new DefaultContext()));

    var people = new List<ChevieUser>
    {
        new ChevieUser { FirstName = "blah", LastName = "blah", UserName="cliningt", Email="blah.blah@blah.co.uk" }
    };

    people.ForEach(x => manager.Create(x, "password"));

    context.SaveChanges();

    var projects = new List<Project>
    {
        new Project { Name= "MLounge", ProposedDuration = DateTime.Now.AddDays(14), Users = new List<ChevieUser>(){context.Users.FirstOrDefault()}  }
    };

    projects.ForEach(x => context.Projects.AddOrUpdate(p => p.Name, x));

    context.SaveChanges();

    //var targets = new List<Target>
    //{
    //    new Target {Name="Initial Meeting", CompletionDate = DateTime.Now.AddDays(1), ProjectId = context.Projects.FirstOrDefault().Id},
    //    new Target {Name="Pricing", CompletionDate = DateTime.Now.AddDays(2), ProjectId = context.Projects.FirstOrDefault().Id},
    //    new Target {Name="Layout", CompletionDate = DateTime.Now.AddDays(3), ProjectId = context.Projects.FirstOrDefault().Id}
    //};

    //targets.ForEach(x => context.Targets.AddOrUpdate(p => p.Name, x));

    //context.SaveChanges();

它创建了一个项目,但该项目的ID为空Guid。即使我使用与Id属性相同的代码,就像我对其他所有项目一样。

[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]

目标代码被注释掉的原因是它无法添加具有相同Id的三个目标,因为上述代码无法正常工作。

所以我想我会用最新的nuget软件包更新我的MVC项目。这很成功。但是,当我来到Update-Database时,出现错误,我的项目中未启用迁移!

然后在尝试Enable-Migrations后,它返回时出现错误,没有上下文!

从一切工作完美无缺,到整个项目搞砸像这样是如此奇怪。对它来说,迁移似乎已经神奇地禁用了自己,但即使它正在工作,DatabaseGenerated(DatabaseGeneratedOption.Identity)也没有正常工作。

1 个答案:

答案 0 :(得分:3)

听起来EF正在寻找错误的项目。

确保Package Manager控制台窗口中的“默认项目”下拉列表设置为包含DbContext类的项目。这告诉包管理器控制台执行命令的项目。