#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. Почему?, У каждого сотрудника «»есть»» работа, я думаю, что это нормальное представление здесь, верно?