如何在 C# .net core EF 中使用子 ID 和子类型创建一个实体与其他实体类型之间的关系?

问题描述 投票:0回答:2

我想在 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;}
}
c# entity-framework code-first core ef-fluent-api
2个回答
0
投票

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; }
}    

0
投票

您必须配置两个类之间的关系,例如使用 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”命名空间中的类名。所以如果你使用任何异步的东西,你迟早会遇到麻烦。

© www.soinside.com 2019 - 2024. All rights reserved.