[英]Composite Key EF Core getting error when using Fluent Api
所以我在Entity Framework Core中有以下類。 我正在嘗試進行代碼優先遷移,並且不能在我的生活中弄清楚如何為這項工作制作流暢的API。
public class Participants
{
public Activity Activity { get; set; } //Class with Id and Name of Activity
public ApplicationUser Participant { get; set; }
[Key]
[Column(Order = 1)]
public int ActivityId { get; set; }
[Key]
[Column(Order = 2)]
public string ParticipantId { get; set; }
}
在EF6中,我能夠在OnModelCreating中執行此操作以使其正常工作。
modelBuilder.Entity<Attendance>()
.HasRequired(a => a.Activity)
.WithMany()
.WillCascadeOnDelete(false);
但在EF Core我得到了
“實體類型'參與者'具有使用數據注釋定義的復合主鍵。要設置復合主鍵,請使用流暢的API。”
我試過用
modelBuilder.Entity<Participants>().HasKey(p => new {p.Activity, p.Participant});
但是,這只會導致
在表'參與者'上引入FOREIGN KEY約束'FK_Participants_AspNetUsers_ParticipantId'可能會導致循環或多個級聯路徑。 指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束。
如果有更好的方法來完成整個事情,我願意接受建議。 如果您有多個訂閱,我基本上是想讓Mosh Hamedani的“成為一個完整的堆棧開發者”在EF核心工作。 該示例位於“13-full-stack-fundamentals”文件夾中。
更新:也嘗試過
modelBuilder.Entity<Participants>()
.HasOne(p => p.Activity)
.WithMany()
.OnDelete(DeleteBehavior.Cascade);
還有
“實體類型'參與者'具有使用數據注釋定義的復合主鍵。要設置復合主鍵,請使用流暢的API。”
更新2:在嘗試了Roy的建議之后,這就是我所得到的
在表'參與者'上引入FOREIGN KEY約束'FK_Participants_AspNetUsers_ParticipantId'可能會導致循環或多個級聯路徑。 指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束。
更新3:在遷移中
我刪除了一個OneDelete:ReferntialAction.Cascade並且它有效。 我刪除了FK_Participants_AspNetUsers_ParticipantId中的一個。
我也在OnModelCreating中更改了這個
modelBuilder.Entity<Participants>()
.HasKey(p => new { p.ActivityId, p.ParticipantId });
base.OnModelCreating(modelBuilder);
//Added this ( Not sure if it's needed if anyone knows let me know)
modelBuilder.Entity<Participants>()
.HasOne(p => p.Activity)
.WithMany()
.OnDelete(DeleteBehavior.Cascade);
你要做的是在活動和參與者之間建立一種關系,這在EFCore中有點不同。
要做到這一點,您需要在模型構建器中引用ForeignKey屬性而不是NavigationProperties,如下所示:
modelBuilder.Entity<Participants>()
.HasKey(p => new { p.ActivityId , p.ParticipantId });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.