我正在使用 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; }
}