0

我想知道以下是否可以在 C# 中使用 EF 6.0 实现。

所以我有一个实体 A,它有一个字典,其中 B 类型的实体作为键,C 实体的列表作为值:

public class A
{
    public int AID { get; set; }
    public Dictionary<B, List<C>> myList { get; set; }

    public somePrimitive AdditionalPropertyOfA { get; set; }
    public somePrimitive AnotherPropertyOfA { get; set; }
}

我想将其转换为数据库表 A,如下例所示:

Table A
AID  BID  CID  AdditionalPropertyOfA  ...
1    1    1    ...
1    1    2    ...
1    2    3    ...
1    2    4    ...
2    1    1    ...
2    2    2    ...
2    2    3    ...
2    2    4    ...

所以我希望我的意思很清楚。在上面的示例中,我们将有两个 A 实体、两个 B 实体和四个 C 实体。

对于 A=1,我们有: B=1:1->2 和 B=2:3->4

对于 A=2,我们有: B=1: 1 和 B=2: 2->3->4

问题是我不知道如何在实体类 A 或使用流利的 Api 中编写它。A 类需要有一个到实体 B 的:m 映射,还需要一个到 C 的:m 映射。但是如何将这些东西组合在一起呢?

编辑:为了更清楚地说明我的意思:将 A 视为工作计划,将 B 视为员工,将 C 视为员工的任务。B 本身就是实体(姓名、地址等),但在 A 的上下文中,它们分配了任务。

4

1 回答 1

0

这种设计应该看起来更像下面的例子。你没有给出任何理由来建立一本字典,所以我不知道你为什么要使用一本。

public class A
{
  public int AID { get; set; }

  public somePrimitive AdditionalPropertyOfA { get; set; }
  public somePrimitive AnotherPropertyOfA { get; set; }

  public virtual ICollection<B> MyBs { get; set; }
}

public class B
{
  public int BID { get; set; }
  public int AID { get; set; }      

  public virtual ICollection<C> MyCs { get; set; }
}

public class C
{
  public int CID { get; set; }
  public int BID { get; set; }      
}

表:(例如)

Table A
AID  AdditionalPropertyOfA  ...
1    ...
2    ...

Table AB (or AtoB)
AID BID
1   1
1   2
2   1
2   2   

Table B
BID  
1    
2    

Table BC (or BtoC)
BID CID
1   1
1   2
2   2
2   3
2   4

Table C
CID
1
2 
3
4
于 2013-09-06T09:37:09.730 回答