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をマップすることだけです。

EFでこれを実行して、データベースにビューを作成し、それにマップする唯一の方法はありますか?

4

2 に答える 2

0

クエリにはc.StatusIdが含まれていますが、クラスには含まれていません。だから私はそれを追加しました。

var query = from c in Case
            join sg in StatusGrouping on c.StatusId equals sg.InternalStatusId
            join sp in StatusPublic on sg.PublicStatusId equals sp.PublicStatusId
            where c.CaseId == 42
            select new Case { CaseId = c.CaseId, Title = c.Title, PublicStatusName = sp.Name};
于 2012-08-16T10:00:49.103 に答える
0

.edmx ファイルで定義クエリを使用できます。このようにして、クエリをモデル クラスに直接マップできます。

クエリの定義の詳細については、 http://msdn.microsoft.com/en-us/library/cc982038.aspxを参照してください。

于 2012-08-03T07:34:18.717 に答える