используя Microsoft Sql Server SMO, чтобы получить отношения в обоих направлениях - PullRequest
0 голосов
/ 29 апреля 2011

Как я могу запросить таблицы, относящиеся к таблицам в обоих направлениях, используя 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 && 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" && dcn.Urn.GetNameForType("Table") != tbl.Name)
                {
                    result.Add(dcn.Urn.GetNameForType("Table"));
                }
            }

            return result;
        }

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

...