Я создал две таблицы:
Издатель
- PK, PublisherId, int, not null, indentity +1
- PublisherName, varchar (50), не нуль
Продукт
- PK, ProductId, int, не null, идентификатор + 1
- ProductName, varchar (50), не нуль
- PublisherId, int, not null
Затем я создал ограничение внешнего ключа FK__Product__Publisher между таблицами, связывающими PublisherId.
Таким образом, я хочу поддерживать Продукты с одним Издателем, в то время как каждый Издатель может иметь несколько Продуктов. Это так просто.
Теперь я создал консольный проект на C #, добавил типизированный набор данных и два TableAdapter. Один указывает на издателя один на продукт. DataSet-Designer автоматически добавляет отношение в зависимости от того, что он получает от SQL Server.
Он также автоматически генерирует свойства, которые позволят мне получить доступ к издателю из выбранного Продукта и ко всем продуктам из выбранного издателя.
Это мой тестовый код:
ProductTableAdapter adapter = new ProductTableAdapter();
foreach (ProductRow product in adapter.GetData())
{
Console.WriteLine(product.PublisherRow.PublisherName);
}
Однако это не работает. Сгенерированный код, свойство PublisherRow выглядит так:
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public LanguageRow PublisherRow {
get {
return ((PublisherRow)(this.GetParentRow(this.Table.ParentRelations["FK_Product_Publisher"])));
}
set {
this.SetParentRow(value, this.Table.ParentRelations["FK_Product_Publisher"]);
}
}
this.Table.ParentRelations не содержит отношения. Он имеет значение null, и при обращении к нему возникает исключение NullReferenceException.
Что я здесь не так делаю?