【发布时间】: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