Entity Framework 没有向数据库添加新的 table
Entity Framework doesn't add new table to database
通常我先用数据库做项目,现在我尝试了(由于 ASP.NET 登录框架)代码优先的方法。到目前为止一切顺利,一切正常。现在我需要向项目添加一个新模型,这样做并将模型添加到 DbContext
:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
public System.Data.Entity.DbSet<Order> Orders { get; set; } // existing one
public System.Data.Entity.DbSet<Document> Documents { get; set; } // new one
}
所以我的数据库中已经有订单 table 中的数据和 asp.net 用户 table 中的用户,我不允许删除数据库,所以我思想,自动迁移:
Package Manager > Enable-Migrations -EnableAutomaticMigrations
然后
PM > update-database (-f)
然而,这个returns:
No pending explicit migrations.
只是不会创建 table。但是,创建了一个名为 Migrations 的新文件夹,其中包含 2 个文件:###########_dbname.cs
和 Configurations.cs
为什么我的 table 不会被创建的任何提示?我什至在迁移文件中尝试过这个
public partial class project: DbMigration
{
public override void Up()
{
CreateTable("dbo.Documents", c => new
{
DocumentId = c.Int(nullable: false, identity: true),
Label = c.Int(nullable: false),
Data = c.Binary(),
OrderId = c.Int(nullable: false)
}).PrimaryKey(t => t.DocumentId)
.ForeignKey("dbo.Orders", t => t.OrderId, cascadeDelete: true);
徒劳
更新
如果我执行add-migration
,会生成如下文件,如何修改?
using System;
using System.Data.Entity.Migrations;
public partial class documents : DbMigration
{
public override void Up()
{
}
public override void Down()
{
}
}
只是执行 update-database
不会改变任何东西
您需要为您的更改添加迁移,然后执行 Update-Database
。 Migrations 文件夹只有 2 个文件,其中 none 个是迁移文件 (TimeStamp_MigrationName.cs),这告诉您没有要执行的迁移。您需要类似的东西(启用迁移后):
PM > Add-Migration -Name NewEntityAdded
整个语法是:
Add-Migration [-Name] [-Force] [-ProjectName ] [-StartUpProjectName ]
[-ConfigurationTypeName ] [-ConnectionStringName ] [-IgnoreChanges]
[-AppDomainBaseDirectory ] []
然后 - 执行 Update-Database
.
更多信息 - Here
更新后编辑
迁移文件为空这一事实意味着在执行 add-migration
时,当前快照与您尝试迁移到的快照之间没有区别。您不必修改迁移文件。所有的变化都必须存在。根据文件,没有什么可以改变的。这就是为什么 'update-database' 没有改变任何东西
你还在保留这个吗:
public partial class project: DbMigration
{
public override void Up()
{
CreateTable("dbo.Documents", c => new
{
DocumentId = c.Int(nullable: false, identity: true),
Label = c.Int(nullable: false),
Data = c.Binary(),
OrderId = c.Int(nullable: false)
}).PrimaryKey(t => t.DocumentId)
.ForeignKey("dbo.Orders", t => t.OrderId, cascadeDelete: true);
在你的代码中?如果是 - 删除它
请尝试以下步骤:
1.创建模型后运行DbContext.tt文件class
2. 在程序包管理器控制台中,select 您的迁移项目(如果您已创建)作为默认项目
3. 运行 add-migration -startupProject "your startup projectname" [Migration_Name]
4. 运行 DbContext.Views.tt 文件
5. update-database-启动项目"your startup projectname"-详细
我意识到我有同样的问题,我运行 add-migration rewreww,迁移脚本不生成表,然后我意识到你需要删除快照中的任何内容,然后重新运行 它解决了我的问题。谢谢 m3n7alsnak3
通常我先用数据库做项目,现在我尝试了(由于 ASP.NET 登录框架)代码优先的方法。到目前为止一切顺利,一切正常。现在我需要向项目添加一个新模型,这样做并将模型添加到 DbContext
:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
public System.Data.Entity.DbSet<Order> Orders { get; set; } // existing one
public System.Data.Entity.DbSet<Document> Documents { get; set; } // new one
}
所以我的数据库中已经有订单 table 中的数据和 asp.net 用户 table 中的用户,我不允许删除数据库,所以我思想,自动迁移:
Package Manager > Enable-Migrations -EnableAutomaticMigrations
然后
PM > update-database (-f)
然而,这个returns:
No pending explicit migrations.
只是不会创建 table。但是,创建了一个名为 Migrations 的新文件夹,其中包含 2 个文件:###########_dbname.cs
和 Configurations.cs
为什么我的 table 不会被创建的任何提示?我什至在迁移文件中尝试过这个
public partial class project: DbMigration
{
public override void Up()
{
CreateTable("dbo.Documents", c => new
{
DocumentId = c.Int(nullable: false, identity: true),
Label = c.Int(nullable: false),
Data = c.Binary(),
OrderId = c.Int(nullable: false)
}).PrimaryKey(t => t.DocumentId)
.ForeignKey("dbo.Orders", t => t.OrderId, cascadeDelete: true);
徒劳
更新
如果我执行add-migration
,会生成如下文件,如何修改?
using System;
using System.Data.Entity.Migrations;
public partial class documents : DbMigration
{
public override void Up()
{
}
public override void Down()
{
}
}
只是执行 update-database
不会改变任何东西
您需要为您的更改添加迁移,然后执行 Update-Database
。 Migrations 文件夹只有 2 个文件,其中 none 个是迁移文件 (TimeStamp_MigrationName.cs),这告诉您没有要执行的迁移。您需要类似的东西(启用迁移后):
PM > Add-Migration -Name NewEntityAdded
整个语法是:
Add-Migration [-Name] [-Force] [-ProjectName ] [-StartUpProjectName ] [-ConfigurationTypeName ] [-ConnectionStringName ] [-IgnoreChanges] [-AppDomainBaseDirectory ] []
然后 - 执行 Update-Database
.
更多信息 - Here
更新后编辑
迁移文件为空这一事实意味着在执行 add-migration
时,当前快照与您尝试迁移到的快照之间没有区别。您不必修改迁移文件。所有的变化都必须存在。根据文件,没有什么可以改变的。这就是为什么 'update-database' 没有改变任何东西
你还在保留这个吗:
public partial class project: DbMigration
{
public override void Up()
{
CreateTable("dbo.Documents", c => new
{
DocumentId = c.Int(nullable: false, identity: true),
Label = c.Int(nullable: false),
Data = c.Binary(),
OrderId = c.Int(nullable: false)
}).PrimaryKey(t => t.DocumentId)
.ForeignKey("dbo.Orders", t => t.OrderId, cascadeDelete: true);
在你的代码中?如果是 - 删除它
请尝试以下步骤:
1.创建模型后运行DbContext.tt文件class
2. 在程序包管理器控制台中,select 您的迁移项目(如果您已创建)作为默认项目
3. 运行 add-migration -startupProject "your startup projectname" [Migration_Name]
4. 运行 DbContext.Views.tt 文件
5. update-database-启动项目"your startup projectname"-详细
我意识到我有同样的问题,我运行 add-migration rewreww,迁移脚本不生成表,然后我意识到你需要删除快照中的任何内容,然后重新运行 它解决了我的问题。谢谢 m3n7alsnak3