2014-03-04 53 views
2

在正在查询EntitySet(例如,多对多关系)的情况下,是否可以访问父对象?是否可以访问Linq对象的父级?

e.g

Thing thing = db.Things.First(); 
Widget widget = thing.Widgets.First(); 
// Let's assume that Widgets can have many things as well 
// (i.e. widget.Things is possible) 
widget.ParentThing // would return the same instance of thing used above 

这可能吗?

+0

所以当你尝试它发生了什么? –

+1

不,除非'Widget'具有对'thing'的引用(这是合乎逻辑的,我假定你已经排除了这一点)。 –

+0

@JeroenVannevel在这种确切的情况下?没有。出于说明目的,“ParentThing”是一种组成财产。 – drewwyatt

回答

4

是有可能访问的父对象

有了很多一对多的是不是真的有一个“父” - 有多个相关对象。一个多一对多通常建模与导航性能:

public class Thing 
{ 
    public int ID {get; set;} 
    public virtual IEnumerable<Widget> Widgets {get; set;} 
} 

public class Widget 
{ 
    public int ID {get; set;} 
    public virtual IEnumerable<Thing> Things {get; set;} 
} 

如果模型没有这样的属性,然后还有一个办法是回到上下文(或回数据库,如果你不有上下文了):

var relatedThings = db.Things 
         .Where(t => t.Widgets.Any(w => ID == widget.ID)); 
+0

是的,我有很多东西 - 'thing.Widgets'和'widget.Things'都可以在我的应用程序中使用 - 但是如果'Thing'查询'Widget'(例如'thing.Widgets.First();')有没有办法让返回的'Widget'访问查询它的特定'Thing'? – drewwyatt

+0

好吧,我现在看到 - 不是我能想到的 - 为什么你需要它?可能有另一种获得你需要的方法。 –

+0

现在,我将实例作为参数传递给需要它的方法调用,并且感觉有点棘手。我只是希望有一种方法来清理它。 – drewwyatt