为什么要使虚拟财产成为新的迁移?

时间:2015-03-03 10:44:07

标签: entity-framework entity-framework-6

我有这样的实体:

public class Foo 
{
    public int Id { get; set; } 
    public Bar Bar { get; set; }
    public Bar2 Bar2 { get; set; }
}

public class Bar 
{
    public int Id { get; set; }
    public string Description { get; set; }
}

public class Bar2
{
    public int Id { get; set; }
    public string Description { get; set; }
}

哪些迁移是:

CreateTable(
    "dbo.Bar",
    c => new
        {
            Id = c.Int(nullable: false, identity: true),
            Description = c.String(),
        })
    .PrimaryKey(t => t.Id);

CreateTable(
    "dbo.Bar2",
    c => new
        {
            Id = c.Int(nullable: false, identity: true),
            Description = c.String(),
        })
    .PrimaryKey(t => t.Id);

CreateTable(
    "dbo.Foo",
    c => new
        {
            Id = c.Int(nullable: false, identity: true),
            Bar_Id = c.Int(),
            Bar2_Id = c.Int(),
        })
    .PrimaryKey(t => t.Id)
    .ForeignKey("dbo.Bar", t => t.Bar_Id)
    .ForeignKey("dbo.Bar2", t => t.Bar_Id)
    .Index(t => t.AlertCause_Id)

然后我在Foo中将Bar属性设置为virtual并且它打破了“AutomaticMigrationsDisabledException:无法更新数据库以匹配当前模型,因为存在挂起的更改并且禁用了自动迁移。”在迁移重新构建脚本之后,代码只会在Bar_Id变为BarId时发生变化,但对于Bar2,它仍然是Bar2_Id。所以我想知道为什么它会让我重新支持迁移,如果它似乎没有改变任何东西?是的,它需要代理类和延迟加载等,但为什么要进行新的迁移?谢谢!

更新

我错过了迁移实际上是由添加外键属性BarId触发的。所以我的错误在这里。

1 个答案:

答案 0 :(得分:0)

找到原因。由于添加了引用属性(BarID),因此触发了迁移,这是一个不正确的问题。我的错。关闭它。