我试图达到的是使用 TPT 继承的 AbstractUser 和 Plant 之间的 NM 关系。
当我尝试配置关系时,
modelBuilder.Entity<Plant>().HasMany(c => c.RemindedByUsers).WithMany().Map(m =>
{
m.ToTable("UserHasRemindedPlant");
});
我得到以下异常:
Additional information: Introducing FOREIGN KEY constraint 'FK_dbo.UserHasRemindedPlant_dbo.AbstractUsers_AbstractUser_Id' on table 'UserHasRemindedPlant' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
如何在 tpt 抽象实体上的多对多关系上设置 ON DELETE 或 ON UPDATE 操作?
当我使用上面的行时,一切正常,但我需要为其他实体使用此约定。
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
这里是我的实体类:
抽象用户
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; }
}
学生
[Table("Student")]
public class Student : AbstractUser
{
//some unrelevant props here
}
老师
[Table("Teacher")]
public class Teacher : AbstractUser
{
//some unrelevant props here
}
最佳答案
您必须使用 Fluent API .WillCascadeOnDelete(false)
禁用级联删除:
modelBuilder.Entity<Plant>().HasMany(c => c.RemindedByUsers).WithMany().WillCascadeOnDelete(false).Map(m =>{
m.ToTable("UserHasRemindedPlant");});
关于c# - 使用 TPT 方法的多对多 Entity Framework ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22940562/