我試圖達到的是AbstractUser和Plant之間使用TPT繼承的NM關係。使用TPT方法的多對多實體框架
當我嘗試配置的關係,
modelBuilder.Entity<Plant>().HasMany(c => c.RemindedByUsers).WithMany().Map(m =>
{
m.ToTable("UserHasRemindedPlant");
});
我得到以下exeption:
其他信息:引進國外KEY約束 「FK_dbo.UserHasRemindedPlant_dbo.AbstractUsers_AbstractUser_Id ' 表'UserHasRemindedPlant'可能導致循環或多個級聯 路徑。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束。
如何在tpt抽象實體的多對多關聯上設置ON DELETE或ON UPDATE動作?
當我使用上面的代碼行時,一切正常,但我需要其他實體的這個約定。
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
這裏我的實體類:
AbstractUser
public abstract class AbstractUser
{
protected AbstractUser()
{
RemindedPlants = new Collection<Plant>();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
...
[Required]
public SchoolYear SchoolYear { get; set; }
public virtual ICollection<Plant> RemindedPlants { get; private set; }
}
Studend
[Table("Student")]
public class Student : AbstractUser
{
//some unrelevant props here
}
教師
[Table("Teacher")]
public class Teacher : AbstractUser
{
//some unrelevant props here
}
的問題是其他地方。如果它在刪除「OneToManyCascadeDeleteConvention」時起作用,則問題不能是多對多關係。例如'Plant'對用戶(AbstractUser或派生用戶之一)有一個(必需的)引用?這確實會導致從'AbstractUser'表到'UserHasRemindedPlant'表的多個刪除路徑並拋出異常。 – Slauma