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”,并能够对其进行更新,使它应该是这样?
答案 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; }
}