如何在 EF 中执行更新级联



EF Database First:
我有模型

public class Book {
  public Guid BookId { get;set; }
  public string BookName { get;set; }
  public string CategoryCode { get;set; } 
  public Category Category { get;set; }
}
public class Category {
  public Guid CategoryId { get;set; }
  public string CategoryName { get;set; }
  public string CategoryCode { get;set; }
}

然后,在我的上下文中,我有

        modelBuilder.Entity<Book>()
            .HasKey(c => c.BookId);
        modelBuilder.Entity<Book>()
            .Property(c => c.CategoryCode )
            .HasColumnName("Category");
        modelBuilder.Entity<Book>()
            .HasOne(c => c.Category)
            .WithMany()
            .HasForeignKey(c => c.CategoryCode )
            .HasPrincipalKey(bu => bu.CategoryCode );

当我尝试更新类别名称时,错误:
实体类型"类别"上的属性"类别名称"是键的一部分,因此无法修改或标记为已修改。要使用标识外键更改现有实体的主体,请先删除依赖实体并调用"SaveChanges",然后将依赖实体与新主体关联。

所以我尝试在更新级联上,但我只看到在删除级联上。那么我该如何更新它呢?

实际上,我只是尝试将书中的"类别代码"引用到"类别代码">

中的"类别代码",并能够对其进行更新,那么它应该如何?

正如@PanagiotisKanavos评论中已经解释的那样,我只是发布解决方案:

CategoryCode不是Category模型类的PrimaryKey。因此,您不能Book模型类中CategoryCode ForeignKey。相反,您必须在模型类中使用CategoryId Book ForeignKey如下所示:

public class Book 
{
  public Guid BookId { get;set; }
  public string BookName { get;set; }
  [ForeignKey("Category")]
  public Guid CategoryId { get;set; } // <-- Here CategoryId instead of CategoryCode
  public Category Category { get;set; }
}

最新更新