【发布时间】:2020-05-20 23:27:02
【问题描述】:
我设计的表格可以包含来自多个表格(Students、Teachers)的记录的参数(Parameters)。
作为参数表上的外键,我使用一个枚举(Student,Teacher),按列与多个表中的主键配对。
如何用参数表中的记录填充对象集合(Student.Parameters、Teacher.Parameters)?
我会尝试以学校的简单例子来解释。
EF Core Code First 数据库上下文:
class Student
{
[Key]
public Guid Id { get; set; }
public IList<Parameter> Parameters { get; set; }
}
class Teacher
{
[Key]
public Guid Id { get; set; }
public IList<Parameter> Parameters { get; set; }
}
enum EntityType
{
Student,
Teacher
}
class Parameter
{
[Key]
public Guid Id { get; set; }
public EntityType EntityType { get; set; }
public Guid EntityId { get; set; }
public string Value { get; set; }
}
class SchoolDbContext : DbContext
{
public DbSet<Student> Students { get; set; }
public DbSet<Teacher> Teachers { get; set; }
public DbSet<Parameter> Parameters { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Parameter>()
.HasKey(prm => new { prm.EntityType, prm.EntityId });
}
}
为了填充 Teacher 对象的 Parameters 集合(还有 Student.Parameters),我希望应用程序执行如下 SQL:
SELECT prm.*
FROM Teachers tch
LEFT JOIN Parameters prm
ON prm.EntityType = 'Teacher'
AND prm.EntityId = tch.Id
WHERE tch.Id = @id
像这样使用它(如果可能的话,也用于级联删除):
Guid studentId = .....;
var student = SchoolDbContext.Students
.Include(s => s.Parameters)
.Find(studentId);
【问题讨论】:
标签: c# entity-framework .net-core ef-code-first ef-core-3.0