我创建了我的项目并配置了用户实体。
我在项目中启用了迁移功能。为了测试这个,我简单地添加了一个用户,然后通过浏览器登录到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)
也没有正常工作。
答案 0 :(得分:3)
听起来EF正在寻找错误的项目。
确保Package Manager控制台窗口中的“默认项目”下拉列表设置为包含DbContext类的项目。这告诉包管理器控制台执行命令的项目。