gpt4 book ai didi

c# - 使用 TPT 方法的多对多 Entity Framework

转载 作者:太空宇宙 更新时间:2023-11-03 13:24:28 26 4
gpt4 key购买 nike

我试图达到的是使用 TPT 继承的 AbstractUser 和 Plant 之间的 NM 关系。

enter image description here

当我尝试配置关系时,

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com