回复我自己的帖子似乎有点奇怪。这有点像和自己说话。然而,我找到了一个解决方案,由于这个问题似乎很常见,我把它贴在这里。
仅仅使用TableAdapter获取数据并不能从数据库中检索到正确的关系。关系的初始化发生在数据集类内(即从数据集'c'调用的InitClass方法):
public DbDataSet() {
this.BeginInit();
this.InitClass();
...
this.EndInit();
}
相应的生成的InitClass方法如下:
private void InitClass() {
...
this.relationFK_Product_Publisher= new global::System.Data.DataRelation("FK_Product_Publisher", new global::System.Data.DataColumn[] { this.tableProduct.PublisherIdColumn}, new global::System.Data.DataColumn[] { this.tablePublisher.PublisherIdColumn}, false);
this.Relations.Add(this.relationFK_Product_Publisher);
}
这就是为什么你需要实例化数据集类本身,并使用fill方法填充你的表类,如下所示:
DbDataSet ds = new DbDataSet();
ProductTableAdapter productAdapter = new ProductTableAdapter();
productAdapter.Fill(ds.Product);
PublisherTableAdapter publisherAdapter = new PublisherTableAdapter();
publisherAdapter.Fill(ds.Publisher);
foreach (ProductRow product in ds.Product)
{
Console.WriteLine(product.PublisherRow.PublisherName);
}