实体框架不会向数据库添加新表

时间:2018-03-15 17:29:52

标签: c# asp.net entity-framework ef-code-first

通常我首先使用数据库创建项目,现在我尝试(由于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
}

所以我已经在我的数据库中的orders表和asp.net用户表中的用户中有数据,我不能允许删除db,所以我想,自动迁移:

Package Manager > Enable-Migrations -EnableAutomaticMigrations

然后

PM > update-database (-f)

然而,这会返回:

No pending explicit migrations.

表格不会被创建。但是,创建了一个名为 Migrations 的新文件夹,其中包含2个文件:###########_dbname.csConfigurations.cs

任何提示为什么我的表不会被创建?我甚至在迁移文件中试过这个

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不会改变任何内容

3 个答案:

答案 0 :(得分:2)

您需要为更改添加迁移,然后执行Update-Database。 Migrations文件夹只有2个文件,而且它们都不是迁移文件(TimeStamp_MigrationName.cs)这一事实告诉您没有要执行的迁移。您需要(启用迁移后):

PM > Add-Migration -Name NewEntityAdded

整个语法是:

  

添加迁移[-Name] [-Force] [-ProjectName] [-StartUpProjectName]     [-ConfigurationTypeName] [-ConnectionStringName] [-IgnoreChanges]     [-AppDomainBaseDirectory] ​​[]

然后 - 执行Update-Database

更多信息 - Here

更新后编辑

迁移文件为空的事实意味着在执行add-migration时,当前快照与您尝试迁移到的快照之间没有区别。您不必修改迁移文件。所有的变化必须在那里。根据该文件,没有什么可以改变的。这就是为什么更新数据库&#39;没有改变什么

你还在保留这个:

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 :(得分:0)

请尝试以下步骤:
    1.创建模型类后运行DbContext.tt文件     2.在程序包管理器控制台中,选择您的迁移项目(如果已创建一个)作为默认项目
    3.运行add-migration -startupProject&#34;您的启动项目名称&#34; [Migration_Name]
    4.运行DbContext.Views.tt文件
    5. update-database -startupProject&#34;你的启动项目名称&#34; -verbose

答案 2 :(得分:0)

我意识到我遇到了同样的问题,我运行了 add-migration rewreww,迁移脚本没有生成表,然后我意识到您需要删除快照中的任何内容,然后重新运行它解决了我的问题。感谢 m3n7alsnak3