实体框架删除虚拟属性结果为空迁移
本文关键字:迁移 结果 属性 框架 删除 虚拟 实体 | 更新日期: 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 : M
与Organization : Terms
的关系,您必须删除两个端点。换句话说,您必须删除Term
上的public virtual Organization Organization { get; set; }
和Organization
上的public virtual ICollection<Term> Terms { get; set; }
。然后您将不会有任何问题与迁移脚本。