私がこのクラスを持っていると想像してください
public class Case
{
[Key]
[DataMember]
public int CaseId { get; set; }
[DataMember]
public string Title { get; set; }
[DataMember]
public string PublicStatusName { get; set; }
}
基本的に、私はこのクエリのようなものの結果セットを取りたいです
select c.Id, c.Title, sp.Name
from Case c
inner join StatusGrouping sg on sg.InternalStatusId = c.StatusId
inner join StatusPublic sp on sp.PublicStatusId = sg.PublicStatusId
where c.Id = 42
それを上のクラスに入れます。
EFでナビゲーションプロパティを作成したり、外部キーの関係などを表現したりできることは知っています。したがって、(醜い)可能性の1つは、CaseクラスにStatusGroupingプロパティを設定することです。次に、StatusGroupingクラスにStatusPublicプロパティを設定し、データを読み取るときにEFに階層をフックさせます。
ただし、StatusGroupingテーブルは、この場合は気にしない単なるリレーションテーブルです。また、PublicStatusIdは気にしません。気になるのは、データベースからCaseをフェッチするたびに、CaseクラスのPublicStatusNameに正しいStatusPublic.Nameをマップすることだけです。
これはおそらく基本的なものです。iBATIS(現在はMyBatis)のようなものでは非常に簡単です。EFでも簡単だと思います。
前もって感謝します!