我試圖確定,如果我目前的設計使用每種類型的層次結構是我最好的方式去關於以下內容:TPT - 當基類的實例被選中時如何查詢合適的孩子?
例如,我有3個子類(經理,行政,員工)所有從我的基地人繼承。然後,我想在網格視圖內顯示Person的所有實例,供最終用戶選擇並編輯其關聯數據。但是,我的問題與如何在選擇人員時查詢適當的類型有關。什麼我目前做的是一樣的東西爲Person類以下內容:
public class Person
{
Guid PersonID { get; set; }
string FirstName { get; set; }
string LastName { get; set; }
string PersonType { get; set; }
}
我然後設置PersonType
場中的每個子類中時,他們實例化。
設置綁定和電線代表對SelectionChanged
事件
BindingSource peopleBinding = new BindingSource();
peopleBinding.DataSource = db.People.Local.ToBindingList();
this.peopleGridView.DataSource = peopleBinding;
this.peopleGridView.SelectionChanged += new EventHandler(peopleGridView_SelectionChanged);
GridView的SelectionChanged事件
if (peopleGridView.SelectedRows.Count != 1)
{
return;
}
Person person = peopleBinding.Current as Person;
if (person == null)
{
return;
}
switch (person.PersonType)
{
case "Employee":
Employee employee = db.Employees.Find(person.PersonID);
// Do Work With Employee
break;
case "Manager":
Manager manager = db.Managers.Find(person.PersonID);
// Do Work With Manager
break;
case "Executive":
Executive executive = db.Executives.Find(person.PersonID);
// Do Work With Executive
break;
default:
throw new ArgumentException (string.Format("Invalid type of person encountered ({0})", person.PersonType);
}
有沒有更好的辦法讓子類的實例,而不是使用PersonType
字段作爲某種鑑別器在確定什麼DbSet
我需要查詢以獲取關聯的實體?
謝謝您的回覆。我忘記了關於「is」的關鍵字,並且原本害怕顯式地down-casting會忽略子類屬性的值。但看看LinqPad,我發現通過查詢基類的單個ID生成的SQL包含對所有子類的參與,並將所有屬性都帶入內存。謝謝你,祝你有美好的一天! –