использование Microsoft Sql Server SMO для получения связей в обоих направлениях

#sql-server #smo

#sql-сервер #smo

Вопрос:

Как я могу запрашивать таблицы, связанные с таблицами, в обоих направлениях, используя SMO

например

 Table Employee
.....
JobId int NULL -- FK

Table Job
JobId int NOT NULL -- PK
  

используя какой-либо инструмент генерации, такой как MS T4 Template и SMO; я хочу получить доступ к следующим классам

 class Employee {
  ......

public int? Job_Id
{
   get { return _Job_Id; }
   set
      {
         if (_Job_Id!= value)
         {
           if (Job != null amp;amp; Job.JobId != value) //THE PROBLEM HERE (I CANNOT GET THE RELATED PK FOR THE RELATED TABLE)
           {
             Job = null;
           }
            _Job_Id= value;
         }
      }
}
private int? _Job_Id;

  Job TheJob {get; set;}
}

class Job {
   .....

  ICollection<Employee> Employees { ..... }
}
  

Вот как я получаю связанные таблицы

   public ArrayList GetChildren(Table tbl, Server server)
        {
            var result = new ArrayList();
            DependencyWalker w = new DependencyWalker(server);      
            DependencyTree tree = w.DiscoverDependencies(new SqlSmoObject[]{tbl}, DependencyType.Children);
            DependencyCollection depends = w.WalkDependencies(tree);

            foreach (DependencyCollectionNode dcn in depends)
            {
                //System.Windows.Forms.MessageBox.Show( tbl.Name   " -> "    dcn.Urn.Parent);           
                if (dcn.Urn.Type == "Table" amp;amp; dcn.Urn.GetNameForType("Table") != tbl.Name)
                {
                    result.Add(dcn.Urn.GetNameForType("Table"));
                }
            }

            return result;
        }
  

Но как я могу получить первичный ключ, на который ссылается соответствующая таблица (PK для связанной таблицы, для которой у меня есть FK).

Комментарии:

1. У сотрудников есть одна работа? Для меня наличие JobID вообще в таблице Employee кажется неправильным

2. Почему?, У каждого сотрудника «»есть»» работа, я думаю, что это нормальное представление здесь, верно?