Table-Per-Type 階層を使用する現在の設計が、次のことを行うための最良の方法であるかどうかを判断しようとしています。
たとえば、3 つの子クラス (Manager、Executive、Employee) があり、それらはすべて基本 Person から継承されます。次に、グリッド ビュー内に Person のすべてのインスタンスを表示して、エンド ユーザーが関連データを選択して編集できるようにします。ただし、私の質問は、 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