5

如果我有一个User具有这些属性的类:

    public Guid UserPreferenceId { get; set; }
    public virtual DefaultUserPreference UserPreference { get; set; }

    public Guid SecondaryUserPreferenceId { get; set; }
    public virtual DefaultUserPreference SecondaryUserPreference { get; set; }

我怎样才能通过流畅的 API 做到这一点?当我尝试运行它时,它说:

在表“用户”上引入 FOREIGN KEY 约束可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。无法创建约束。请参阅以前的错误。

我见过一些这样的问题,但它们总是涉及一个导航属性和一个集合。此外,这种关系是单向的,但如果必须是双向的,则不确定这是否重要。

4

1 回答 1

5

默认情况下,Entity Framework 创建与 Cascade Delete 的关系。创建从一个实体到另一种类型的两个关系会尝试创建两个级联删除关系,数据库将抛出您看到的错误。

使用 Code-First Fluent 配置删除一个或两个关系上的级联删除:

modelBuilder.Entity<User>()
    .HasOptional(u => u.UserPreference)
    .WithMany()
    .WillCascadeOnDelete(false);
modelBuilder.Entity<User>()
    .HasOptional(u => u.SecondaryUserPreference)
    .WithMany()
    .WillCascadeOnDelete(false);
于 2013-06-19T21:14:02.047 回答