Table 未使用 EF 代码优先方法进行映射
Table not mapped using EF code first approach
我想使用 EF code first approach
。我添加了数据库并生成了 tables 。然后我添加了这个 class
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; }
}
我运行这些命令然后:
add-migrations second
update-database
第二个class迁移的Up
和Down
方法是空的!!并且没有 table 被添加到数据库中。
上下文
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);
}
}
所以我需要知道
- 这个问题的原因是什么?
- 我该如何解决?
您似乎忘记告诉 Entity Framework 您想要添加的新 table (DbSet<Invitation>
)
添加后,Entity Framework 应分别在迁移脚本中添加要添加的 table(s)。
总而言之,您需要添加这一行:
public DbSet<Invitation> Invitations { get; set; }
and/or
public IDbSet<Invitation> Invitations { get; set; }
和运行另一个迁移脚本。
我认为您需要创建初始迁移。如果这是您的第一次迁移(请注意,这将清除您现有的迁移历史记录,因此仅在您愿意放弃现有的迁移历史记录时使用)
- 删除解决方案中的 Migrations 文件夹
- 删除您的更改(从您的
DbContext
中删除对新 table 的引用)。请注意,-IgnoreChanges
很可能会使此步骤变得多余,但我不能肯定地说。
- 从您的数据库中删除 MigrationHistory table(它很可能不存在,但如果存在,您可以继续删除它)
现在启用迁移(在包管理器控制台中)
Enable-Migrations
然后创建您的初始迁移。这将创建一个迁移,使您的现有架构与空方法相匹配
Add-Migration Initial –IgnoreChanges
Update-Database
然后使用新的 table 参考更新您的 DbContext
并进行任何其他您需要做的更改
Add-Migration MyChanges
Update-Database
这应该将更改应用于数据库。一些 more info over at MSDN 如果你需要的话。
尝试将以下内容添加到您的 ApplicationContext class
public DbSet<Invitation> Invitations { get; set; }
然后运行;
Enable-Migration
Add-Migration note_of_changes
Update-Database
我想使用 EF code first approach
。我添加了数据库并生成了 tables 。然后我添加了这个 class
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; }
}
我运行这些命令然后:
add-migrations second
update-database
第二个class迁移的Up
和Down
方法是空的!!并且没有 table 被添加到数据库中。
上下文
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);
}
}
所以我需要知道
- 这个问题的原因是什么?
- 我该如何解决?
您似乎忘记告诉 Entity Framework 您想要添加的新 table (DbSet<Invitation>
)
添加后,Entity Framework 应分别在迁移脚本中添加要添加的 table(s)。
总而言之,您需要添加这一行:
public DbSet<Invitation> Invitations { get; set; }
and/or
public IDbSet<Invitation> Invitations { get; set; }
和运行另一个迁移脚本。
我认为您需要创建初始迁移。如果这是您的第一次迁移(请注意,这将清除您现有的迁移历史记录,因此仅在您愿意放弃现有的迁移历史记录时使用)
- 删除解决方案中的 Migrations 文件夹
- 删除您的更改(从您的
DbContext
中删除对新 table 的引用)。请注意,-IgnoreChanges
很可能会使此步骤变得多余,但我不能肯定地说。 - 从您的数据库中删除 MigrationHistory table(它很可能不存在,但如果存在,您可以继续删除它)
现在启用迁移(在包管理器控制台中)
Enable-Migrations
然后创建您的初始迁移。这将创建一个迁移,使您的现有架构与空方法相匹配
Add-Migration Initial –IgnoreChanges
Update-Database
然后使用新的 table 参考更新您的 DbContext
并进行任何其他您需要做的更改
Add-Migration MyChanges
Update-Database
这应该将更改应用于数据库。一些 more info over at MSDN 如果你需要的话。
尝试将以下内容添加到您的 ApplicationContext class
public DbSet<Invitation> Invitations { get; set; }
然后运行;
Enable-Migration
Add-Migration note_of_changes
Update-Database