C# 未使用EF代码优先方法映射表
我想使用C# 未使用EF代码优先方法映射表,c#,.net,entity-framework,asp.net-identity,code-first,C#,.net,Entity Framework,Asp.net Identity,Code First,我想使用EF代码优先方法。我添加了数据库并生成了表。然后我加了这个类 public class Invitation { [Key] public int Id { get; set; } [DefaultValue(false)] public bool State { get; set; } public string Mail { get; set; } pub
EF代码优先方法
。我添加了数据库并生成了表。然后我加了这个类
public class Invitation
{
[Key]
public int Id { get; set; }
[DefaultValue(false)]
public bool State { get; set; }
public string Mail { get; set; }
public string Tel { get; set; }
public string Name { get; set; }
public string Qr_code { get; set; }
}
然后我运行以下命令:
第二次添加迁移
更新数据库
第二类迁移的Up
和Down
方法是空的!!并且没有表被添加到数据库中
上下文
public class ApplicationContext: IdentityDbContext<ApplicationUser>
{
public ApplicationContext()
:base("DefaultConnection")
{
Database.SetInitializer<ApplicationContext>(new CreateDatabaseIfNotExists<ApplicationContext>());
}
public static ApplicationContext Create()
{
return new ApplicationContext();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
公共类应用程序上下文:IdentityDbContext
{
公共应用程序上下文()
:base(“默认连接”)
{
SetInitializer(新的CreateDatabaseIfNotExists());
}
公共静态应用程序上下文创建()
{
返回新的ApplicationContext();
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
}
}
所以我需要知道
看起来您忘记告诉Entity Framework您要添加的新表(
DbSet
)
添加此表后,Entity Framework应分别添加要添加到迁移脚本中的表
总之,您需要添加以下行:
public DbSet<Invitation> Invitations { get; set; }
公共数据库集邀请{get;set;}
和/或
public IDbSet<Invitation> Invitations { get; set; }
公共IDbSet邀请{get;set;}
然后运行另一个迁移脚本。我认为您需要创建一个初始迁移。如果这是您的第一次迁移(请注意,这将清除您现有的迁移历史记录,因此仅在您愿意放弃现有迁移历史记录时使用)
DbContext
中删除对新表的引用)。请注意,-IgnoreChanges
很可能会使此步骤变得多余,但我不能确定Add-Migration Initial –IgnoreChanges
Update-Database
然后使用新的表引用更新DbContext
,并进行任何其他需要进行的更改
Add-Migration MyChanges
Update-Database
这应该将更改应用到数据库。如果需要,可以添加一些。尝试将以下内容添加到ApplicationContext类中
public DbSet<Invitation> Invitations { get; set; }
我没有看到任何
DbSet
值…您忘记了一些代码吗?是的,DbSet
值缺失。这就是Up()和Down()为空的原因。@MarkC。是的,我忘了在上下文中添加它,将您的评论作为一个提问者发布。或者,您可以添加一个更有意义的注释“AddDbSet”=固定OP的问题,他们说:我添加了数据库,并生成了表。。假设这已经完成,我不认为初始数据库创建实际上会创建迁移。我遇到了第一次迁移没有正确进行的问题(类似于空方法的症状),正如前面提到的那样,通过创建初始迁移解决了这个问题。话虽如此,问题似乎是您在本例中所说的缺少DbSet
。我本来打算把我的答案留在这里,因为有点模棱两可,但我可以把它删掉。这会让问题变得复杂吗?真的吗?有什么例外吗?我认为你根本不应该删除它!很可能其他人也会遇到这种情况(只是不认为这个问题是这样的)是的,没有例外。给人一种工作的感觉,但就是没有感觉到任何变化。那我就把它放在这里,将来可能会帮助别人。
public DbSet<Invitation> Invitations { get; set; }
Enable-Migration
Add-Migration note_of_changes
Update-Database