我想在 Task 实体和子实体之间创建直接关系,以获取相应的子实体的任务,以及当我获取子实体时获取相应的任务。
我有一个名为 Task 的实体,我需要将它与其他实体类型 one2one 相关联。我的解决方案是在任务实体中为子 ID 创建一个属性,为子类型创建一个属性:
public class Task
{
public int Id { get; set; }
public int ChildId { get; set; }
public int TaskTypeId { get; set; }
public Child1 Child1{ get; set; }
public Child2 Child2{ get; set; }
}
public class Child1
{
public int Id { get; set; }
public Task Task{get; set;}
}
public class Child2
{
public int Id { get; set; }
public Task Task {get; set;}
}
Child1
和Child2
类的属性相同,为什么要创建2个单独的类?用一个班级这样做不行吗?
public class Task
{
public int Id { get; set; }
public int TaskTypeId { get; set; }
public IEnumerable<Child1> Childs{ get; set; }
}
public class Child1
{
public int Id { get; set; }
public int TaskId { get; set; }
public Task Task { get; set; }
}
您必须配置两个类之间的关系,例如使用 IEntityTypeConfiguration。
public class Task
{
public int Id { get; set; }
public int ChildId { get; set; }
public int TaskTypeId { get; set; }
public Child1 Child1{ get; set; }
public Child2 Child2{ get; set; }
}
public class Child1
{
public int Id { get; set; }
public Task Task{get; set;}
}
public class Child2
{
public int Id { get; set; }
public Task Task {get; set;}
}
IEntityTypeConfiguration的实现:
internal class Child1DbConfig : IEntityTypeConfiguration<Child1>
{
public void Configure(EntityTypeBuilder<Child1> entity)
{
entity.ToTable("Child1");
entity.HasKey(c => c.Id);
entity.HasOne(d => d.Task)
.WithOne(p => p.Child1)
.HasForeignKey(d => d.TaskId);
}
}
不要忘记在添加/编辑 IEntityTypeConfiguration 接口后进行新的迁移。
另外:也许为你的任务类选择另一个名字。任务已经是“System.Threading”命名空间中的类名。所以如果你使用任何异步的东西,你迟早会遇到麻烦。