【问题标题】:.Net Core - EF Core - Context modelBuilder issue.Net Core - EF Core - 上下文模型构建器问题
【发布时间】:2021-09-25 22:51:03
【问题描述】:

我已将我的项目从 EF6 升级到 .NET Core 和 EF Core,但在旧版本中运行良好的现在无法运行,我不知道如何修改实现,我需要的帮助很少。

我正在将老师和学生与班级联系起来,老师和学生是个人资料,可以单独连接。

我的模型:

public class Teacher : Profile, IClsModel, IMemberContainer
{
    public Teacher() :base()
    {
        Cls = new List<ProfileClass>();
    }

    public Teacher(RegisterModel model): base(model)
    {
        Cls = new List<ProfileClass>();
    }

    [DisplayName("Classes")]
    public virtual ICollection<ProfileClass> Cls { get; set; }
}

public class Student : Profile, IClsModel
{
    public Student():base()
    {
        Cls = new List<ProfileClass>();
    }

    public Student(RegisterModel model):base(model)
    {
        Cls = new List<ProfileClass>();
    }

    public string Name { get; set; }

    [DisplayName("Classes")]
    public virtual ICollection<ProfileClass> Cls { get; set; }
}

public class ProfileClass
{
    public ProfileClass()
    {
    }

    [Key]
    public int ProfileClassId { get; set; }

    public int? ClassId { get; set; }
    public long? ProfileId { get; set; }

    [ForeignKey("TeacherProfile")]
    public virtual Profile TeacherProfile { get; set; }

    [ForeignKey("StudentProfile")]
    public virtual Profile StudentProfile { get; set; }

    [ForeignKey("ClassId")]
    public virtual Cls Cls { get; set; }
}

上下文中的构建器:

modelBuilder.Entity<Teacher>()
                   .HasMany(u => u.Cls)
                   .WithOne(ul => (Teacher)ul.TeacherProfile).IsRequired()
                   .HasForeignKey(ul => ul.ProfileId)
                   .OnDelete(DeleteBehavior.NoAction);

modelBuilder.Entity<Student>()
                   .HasMany(u => u.Cls)
                   .WithOne(ul => (Student)ul.StudentProfile).IsRequired()
                   .HasForeignKey(ul => ul.ProfileId)
                   .OnDelete(DeleteBehavior.NoAction);

以下情况除外:

System.InvalidOperationException:“无法从实体类型“ProfileClass”中删除属性“TeacherProfile”,因为它正在“ProfileClass”的外键 {“TeacherProfile”} 中使用。 必须先删除或重新定义所有包含外键,然后才能删除该属性。'

System.InvalidOperationException:“无法从实体类型“ProfileClass”中删除属性“StudentProfile”,因为它正在“ProfileClass”的外键 {“StudentProfile”} 中使用。 必须先删除或重新定义所有包含外键,然后才能删除该属性。'

【问题讨论】:

  • 请添加重现此问题所需的所有类/接口。
  • ProfileClass 中移除ForeignKey 注释应该可以解决问题。

标签: c# .net-core data-binding entity-framework-core


【解决方案1】:

如果要删除相关记录,必须先从相关表中删除。如果不先从 ProfileClass 中删除,则无法删除 StudentProfile 或 TeacherProfile。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-08
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 2022-09-27
    • 2022-07-15
    相关资源
    最近更新 更多