how can I 'walk' the relationships between tables in LINQ?

十年热恋 提交于 2019-12-10 15:59:24

问题


Let's say I have three tables:

Office
 ID 

SalespeopleOffice 
 ID 
 OfficeID
 PersonID

People 
 ID 
 ManagerID 

In LINQ to SQL, how can I start from the SalespeopleOffices table and "walk" from that table to the People table or the Office table via the relationships between the tables? Specifically without knowing what those relationships are; pull the data about the relationships instead of interacting with the objects directly. I'm looking for a way to programatically analyze table relationships. The database I'm working with has many more tables than this, so in reality it's a lot more complex than this.

I'd ideally like to create a LinqPad script to do this.


回答1:


You can use reflection to examine the properties on each type in the context. (In LinqPad, the context is this).

  • Value and string properties will be scalar fields on the table,
  • EntitySet properties will represent [something]-to-many relationships, and
  • other types will be [something]-to-one relationships.

If you connect the two sides of the relationships you can figure out what the [something] is in each case. Does that make sense?

Edit

I was just poking around a little, and there's a better approach. The model information is available via the Mapping property. Try this:

var tableData = from t in this.Mapping.GetTables()
                select new 
                {
                    t.TableName,
                    Associations = 
                        from a in t.RowType.Associations
                        select new
                    {
                        a.ThisMember.Name,
                        TypeName = a.ThisMember.Type.Name
                    }
                };
tableData.Dump();

Assuming you've activated Auto Completion, it should be a piece of cake to find the exact data you're interested in by exploring the properties on this meta data.




回答2:


If you're using LINQ to SQL, your SalespeopleOffices instances shoud have People and Office properties.

Something like:

var salesPO = dataContext.SalespeopleOffices.First()
var office = salesPO.Office 
var man = salesPO.People


来源:https://stackoverflow.com/questions/4380834/how-can-i-walk-the-relationships-between-tables-in-linq

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!