如何在EF

时间:2019-05-28 09:34:09

标签: c# entity-framework

EF数据库优先:
我有模特

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 );

当我尝试更新CategoryName时出现错误:
实体类型“类别”的属性“类别名称”是键的一部分,因此无法进行修改或将其标记为已修改。要使用标识的外键更改现有实体的委托人,请先删除依赖项,然后调用“ SaveChanges”,然后将依赖项与新委托人相关联。

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

实际上,我只是尝试将Book中的“ CategoryCode”引用到Category中的“ CategoryCode”,并能够对其进行更新,使它应该是这样?

1 个答案:

答案 0 :(得分:0)

由于@PanagiotisKanavos在评论中已经进行了很大的解释,我只是发布解决方案:

CategoryCode不是PrimaryKey模型类的Category。因此,您无法在CategoryCode模型类中将ForeignKey设为Book。相反,您必须在CategoryId模型类中将ForeignKey用作Book,如下所示:

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