如何在任意多对关系中直接获取“子”行EF6

时间:2018-03-20 16:10:16

标签: c# entity-framework-6

我的EF6模型有很多这样的关系(我简化了模型以使其更清晰):

 public class Card 
 {
    public int CardId { get; set; }
    public string CardTitle { get; set; }

    public virtual ICollection<CardLayout> CardLayouts { get; set; }
 }

 public class Layout
 {
    public int LayoutId { get; set; }
    public string LayoutTitle { get; set; }

    public virtual ICollection<CardLayout> CardLayouts { get; set; }
 }

 public class CardLayout // relationship table
 {
    public int CardLayoutId { get; set; }
    public int CardId { get; set; }
    public int LayoutId { get; set; }

    public int CardLocation { get; set; }

    public virtual Card Card { get; set; }
    public virtual Layout Layout { get; set; }
 }

这就是我现在使用它的方式:

 int exampleId = 23;
 using (MyContext ctx = new MyContext())
 {
     Card c = ctx.Cards.Find(23);

     foreach (CardLayout cardLayout in c.CardLayouts)
     {
          Layout layout = cardLayout.Layout;
          DoSomethingWithLayout(layout);
     }
 }

我需要直接在我的Card对象中进行布局收集。我不想通过关系表。我想这样使用它:

 int exampleId = 23;
 using (MyContext ctx = new MyContext())
 {
     Card c = ctx.Cards.Find(23);

     foreach (Layout layout in c.Layouts)
     {
          DoSomethingWithLayout(layout);
     }
 }

我尝试过这样的事情:

public class Card 
{
    public int CardId { get; set; }
    public string CardTitle { get; set; }

    public virtual ICollection<CardLayout> CardLayouts { get; set; }
    public virtual ICollection<Layout> Layouts { get; set; }
 }

Layouts集合始终为空。

我的问题是:如何直接从Card对象访问Layouts集合?我也想保留Card.CardLayouts集合,因为我的CardLayouts表包含字段(比如我简化示例中的CardLocation)

聚苯乙烯。有人可以提高我的问题标题吗?我的英语不够好,写得更好。提前谢谢。

1 个答案:

答案 0 :(得分:2)

虽然我认为@ Biscuits&#39;评论是正确的。如果您因任何原因不想走这条路线,您应该只能用吸气剂创建另一个属性。

interrupt