我已经搜索了空迁移,而那些解决方案(即清洁解决方案/构建)对我来说并不起作用。我想知道是否还会有更多事情发生。
我有一个实体......
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按预期成功运行。
答案 0 :(得分:1)
由于与userSchema.pre("save", function (next) {
this.userDisplayName = this.username;
this.username = this.username.toLowerCase();
next();
});
的{{1}}关系,您必须删除两个端点。换句话说,您必须删除1 : M
和{{1}上的Organization : Terms
在public virtual Organization Organization { get; set; }
上。然后你就不会遇到迁移脚本的任何问题。