实体框架删除虚拟属性结果为空迁移

本文关键字:迁移 结果 属性 框架 删除 虚拟 实体 | 更新日期: 2023-09-27 18:11:48

我已经搜索了空迁移,以及那些解决方案(即。干净的解决方案/构建)对我不起作用。我想知道是否还有其他的事情。

我有一个实体…

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"上创建指向组织实体的外键约束和索引。

我们正在删除到Organization实体的链接。因此,我们自然会删除虚拟财产,然后运行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'.

谢谢你的建议和帮助。

Update # 1 根据请求,这里是Organization类。

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

仔细看这段代码,我意识到在运行add-migration之前,有一个指向Terms的属性没有被删除。

试了试,我也删除了这个属性,添加迁移像预期的那样成功地运行。

实体框架删除虚拟属性结果为空迁移

由于1 : MOrganization : Terms的关系,您必须删除两个端点。换句话说,您必须删除Term上的public virtual Organization Organization { get; set; }Organization上的public virtual ICollection<Term> Terms { get; set; }。然后您将不会有任何问题与迁移脚本。