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