0

私がこのクラスを持っていると想像してください

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でも簡単だと思います。

前もって感謝します!

4

1 に答える 1

1

Easiest way to do that: create view in database, map entity to view.
-- or --
Create query with anonymous type as result.

Either way you'll have one-time readonly result. Which, as far as I can see, is the only application of your question.

于 2012-08-02T13:28:22.617 に答える