在过去的几天里,我们首先开始研究代码,作为其中的一部分,我在进行映射时遇到了一个问题,我在这里用不同的例子进行了总结。如果我得到任何解决方案会更有帮助 为此。
以下是三个实体
课程 - >实体持有关于课程的信息,如费用,描述等,每门课程都会 属于某个类别或类型(即学生,员工等),它指的是在 ParentId 和类型 的帮助下进行注册的人专栏
示例:要获得ID为10的学生的课程,sql查询将是
"select * from course where type=1 and parentid=10"
学生:这里的CourseJoined实体应该只获取学生类型的相关记录(即......)同样适用于员工
首先如何实现这一目标?
我试图在这里实现TPH逻辑,但我得到了异常
public enum CourseType
{
Student = 1,
Employee = 2
}
public class Course
{
public int ID { get; set; }
public int ParentID { get; set; }
public decimal Amount { get; set; }
public CourseType Type { get; set; }
public string Description { get; set; }
}
public class StudentCourse : Course
{
}
public class EmployeeCourse : Course
{
}
public class Student
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<StudentCourse> CourseJoined { get; set; }
}
public class Employee
{
public int ID { get; set; }
public string Name { get; set; }
public string WorkingAs { get; set; }
public string Experiance { get; set; }
public virtual ICollection<EmployeeCourse> CourseJoined { get; set; }
}
例外:
外键组件&#39; ParentID&#39;不是声明的财产 键入&#39; EmployeeCourse&#39;。验证它是否未明确 从模型中排除,并且它是一个有效的原始属性。
2)为避免该错误,我从课程表中删除了ParentID 在我发现下面的迁移脚本
后,将它们放在StudentCourse和EmployeeCourse中CreateTable(
"dbo.Course",
c => new
{
ID = c.Int(nullable: false, identity: true),
Amount = c.Decimal(nullable: false, precision: 18, scale: 2),
Type = c.Int(),
Description = c.String(),
ParentID = c.Int(),
ParentID1 = c.Int(),
})
.PrimaryKey(t => t.ID)
.ForeignKey("dbo.Employee", t => t.ParentID, cascadeDelete: true)
.ForeignKey("dbo.Student", t => t.ParentID1, cascadeDelete: true)
.Index(t => t.ParentID)
.Index(t => t.ParentID1);
其中为课程创建了两列但我不想要两列(t.ParentID和t.ParentID1),我只想要ParentID,我将插入学生和员工ID。
有人可以指导我修改上述或任何建议以实施上述方案吗?
我正在使用EF 6.0版本。