实体框架使用空迁移删除虚拟财产结果

时间:2016-10-06 17:52:53

标签: c# .net entity-framework

我已经搜索了空迁移​​,而那些解决方案(即清洁解决方案/构建)对我来说并不起作用。我想知道是否还会有更多事情发生。

我有一个实体......

public class Term
{
    public int Id { get; set; }
    public string Title { get; set; }
    public virtual Organization Organization { get; set; }
}

当在数据库中构建此实体时,它会创建一个列" Organization_Id"。本组织实体是直截了当的。没什么奇怪的。通常在运行add-migration时,它还会在" Organization_Id"上创建外键约束和索引。指向组织实体。

我们正在删除组织实体的链接。因此,我们自然会删除虚拟属性,然后运行add-migration。我希望看到" Organization_Id"列,但它是一个空的迁移类。

public partial class termremoveorg : DbMigration
{
    public override void Up()
    {
    }

    public override void Down()
    {
    }
}

在尝试了一百种不同的事情后,我感到很茫然。我甚至通过手动设置来手动添加删除列...

public partial class termremoveorg : DbMigration
{
    public override void Up()
    {
        DropIndex("dbo.Terms", new[] { "Organization_Id" });
        DropForeignKey("dbo.Terms", "Organization_Id", "dbo.Organizations");
        DropColumn("dbo.Terms", "Organization_Id");
    }

    public override void Down()
    {
        AddColumn("dbo.Terms", "Organization_Id", c => c.Int());
        AddForeignKey("dbo.Terms", "Organization_Id", "dbo.Organizations", "Id");
        CreateIndex("dbo.Terms", "Organization_Id");
    }
}

但是当我运行update-database时,数据库表成功地拥有" Organization_Id"列已删除。但是当Seed()方法到达代码中的几个Term对象被插入到数据库中时,我得到以下错误(它们没有引用任何指向组织记录的链接)...

System.Data.SqlClient.SqlException: Invalid column name 'Organization_Id'.

感谢您的任何见解或帮助。

更新#1 根据要求,这是组织类。

public class Organization
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Term> Terms { get; set; }
}

仔细观察这段代码,我意识到有一个属性指向在运行add-migration之前未删除的术语。

尝试一下,我也删除了这个属性,并且add-migration按预期成功运行。

1 个答案:

答案 0 :(得分:1)

由于与userSchema.pre("save", function (next) { this.userDisplayName = this.username; this.username = this.username.toLowerCase(); next(); }); 的{​​{1}}关系,您必须删除两个端点。换句话说,您必须删除1 : M和{{1}上的Organization : Termspublic virtual Organization Organization { get; set; }上。然后你就不会遇到迁移脚本的任何问题。