循环引用指的是两个或多个对象相互引用,导致无法正确地加载这些对象。在 Entity Framework Core 中,这可能会发生在定义外键关系时,而这些关系可能会形成循环。为了解决这个问题,应该使用 Fluent API 明确地配置外键关系并禁用级联操作。
示例代码:
public class Author {
public int AuthorId { get; set; }
public string Name { get; set; }
public List Books { get; set; }
}
public class Book {
public int BookId { get; set; }
public string Title { get; set; }
public int AuthorId { get; set; }
public Author Author { get; set; }
}
public class LibraryContext : DbContext {
public DbSet Authors { get; set; }
public DbSet Books { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder) {
modelBuilder.Entity()
.HasOne(typeof(Author), "Author")
.WithMany("Books")
.HasForeignKey("AuthorId")
.OnDelete(DeleteBehavior.ClientSetNull);
}
}
在上面的示例中,我们使用 Fluent API 明确规定了外键关系,其中 Book
对象有一个名为 Author
的导航属性。同时,我们还规定在删除 Author
时将用 ClientSetNull
行为将其设置为 null
,从而避免了级联删除操作。