0

我正在使用 Entity Framework 5 进行迁移。我的模型如下所示:

UserRegistration
Sessions

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

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

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

        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; }
}
4

1 回答 1

0

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

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

于 2013-10-25T08:06:03.463 回答