4

假设我有三个表:

Office
 ID 

SalespeopleOffice 
 ID 
 OfficeID
 PersonID

People 
 ID 
 ManagerID 

在 LINQ to SQL 中,如何从表开始并通过表之间的关系从该SalespeopleOffices表“步行”到People表或表?Office特别是在不知道这些关系是什么的情况下;提取有关关系的数据,而不是直接与对象交互。我正在寻找一种以编程方式分析表关系的方法。我正在使用的数据库有比这更多的表,所以实际上它比这复杂得多。

理想情况下,我想创建一个 LinqPad 脚本来执行此操作。

4

2 回答 2

6

您可以使用反射来检查上下文中每种类型的属性。(在 LinqPad 中,上下文是this)。

  • 值和字符串属性将是表上的标量字段,
  • EntitySet 属性将表示 [something]-to-many 关系,并且
  • 其他类型将是 [something]-to-one 关系。

如果你把关系的两个方面联系起来,你就可以弄清楚每种情况下[某事]是什么。那有意义吗?

编辑

我只是四处逛逛,还有更好的方法。模型信息可通过 Mapping 属性获得。试试这个:

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();

假设您已激活自动完成功能,通过探索此元数据的属性来找到您感兴趣的确切数据应该是小菜一碟。

于 2010-12-07T21:43:39.893 回答
1

如果您使用 LINQ to SQL,您的 SalespeopleOffices 实例应该具有 People 和 Office 属性。

就像是:

var salesPO = dataContext.SalespeopleOffices.First()
var office = salesPO.Office 
var man = salesPO.People
于 2010-12-07T19:47:37.590 回答