实体框架删除与迁移的关系

时间:2013-05-31 13:53:39

标签: entity-framework ef-migrations

我正在使用Entity Framework 5进行迁移。我的模型看起来像这样:

UserRegistration
Sessions

每次注册都可以有很多会话。尝试运行迁移时,我遇到了SQL级联删除错误的问题,因此我尝试通过添加以下代码来删除级联删除:

        modelBuilder.Entity<UserRegistration>()
                    .HasOptional(x => x.Sessions)
                    .WithMany()
                    .WillCascadeOnDelete(false);

现在,如果你知道EF,你可以看到该代码的错误。我认为这给了我一个从UserRegistrations到Sessions的1对多关系,实际上这段代码说“每个UserRegistration都有一个可选的Session,每个Session都有很多UserRegistrations”。所以我的一对多关系走错了方向。我相信这应该是我添加的代码。

        modelBuilder.Entity<UserRegistration>()
                    .HasMany(x => x.Sessions)
                    .WithRequired(x => x.UserRegistration)
                    .WillCascadeOnDelete(false);

但是,当我删除坏代码(上面的第一个块)并运行add-migration时,我得到了这个:

        public override void Up()
    {
        DropForeignKey("dbo.UserRegistrations", "Sessions_Id", "dbo.UserRegistrationSessions");
        DropIndex("dbo.UserRegistrations", new[] { "Sessions_Id" });
        RenameColumn(table: "dbo.UserRegistrationSessions", name: "Sessions_Id", newName: "UserRegistration_Id");
    }

前两行(DropForeignKey和DropIndex)看起来不错,这是从UserRegistrations表中删除外键。然而,第3行无处不在。 UserRegistrationSessions表中没有Sessions_Id列。当我运行它时,我预计会出错:

Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong.

我在想我的模型和我的模型构建器代码之间的问题。也许我需要尝试让我的模型看起来不正确,但匹配模型构建器代码,然后继续修复。

以下是我模型中的相关代码:

public class UserRegistration
{
    public int Id { get; set; }

    public virtual ICollection<UserRegistrationSession> Sessions { get; set; }
}

public class UserRegistrationSession
{
    public int Id { get; set; }

    public virtual UserRegistration UserRegistration { get; set; }
}

1 个答案:

答案 0 :(得分:0)

这更像是对评论中问题的回答,即“实体框架从何处获取信息”。答案可能是附加到迁移的资源文件中模型的序列化版本。

如果尚未在野外部署迁移,是否可以在创建迁移之前删除有问题的迁移并将数据库回滚到其中?