Как я могу «пройти» отношения между таблицами в LINQ? - PullRequest
4 голосов
/ 07 декабря 2010

Допустим, у меня есть три таблицы:

Office
 ID 

SalespeopleOffice 
 ID 
 OfficeID
 PersonID

People 
 ID 
 ManagerID 

В LINQ to SQL, как я могу начать с таблицы SalespeopleOffices и "пройти" от этой таблицы к таблице People или1006 * таблица через отношения между таблицами?В частности, не зная, каковы эти отношения;получить данные об отношениях вместо непосредственного взаимодействия с объектами.Я ищу способ для программного анализа табличных отношений.База данных, с которой я работаю, имеет намного больше таблиц, чем эта, поэтому в действительности она намного сложнее, чем эта.

В идеале я бы хотел создать скрипт LinqPad для этого.

Ответы [ 2 ]

5 голосов
/ 08 декабря 2010

Вы можете использовать отражение, чтобы изучить свойства каждого типа в контексте. (В LinqPad контекстом является this).

  • Значения и строковые свойства будут скалярными полями в таблице,
  • Свойства EntitySet будут представлять отношения [что-то]-ко-многим, и
  • другие типы будут отношениями "что-то" к одному.

Если вы соедините две стороны отношений, вы сможете выяснить, что [что-то] есть в каждом случае. Имеет ли это смысл?

Редактировать

Я просто немного ковырялся, и есть лучший подход. Информация о модели доступна через свойство 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();

Предполагая, что вы активировали Автозаполнение, вам будет просто найти точные данные, которые вас интересуют, изучив свойства этих метаданных.

1 голос
/ 07 декабря 2010

Если вы используете LINQ to SQL, ваши экземпляры SalespeopleOffices должны иметь свойства «Люди» и «Office».

...