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.csConfigurations.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