2012-02-18 8 views
-1

私はasp.net MVC 3プロジェクトに取り組んでいます。私はEF 4.1のコードを最初に使用しています。私は紛争というエンティティクラスを持っています。データベース名はtblDisptesのテーブルにマップされます。 Lastviewedby、Lastupdatedby、LastRespondedByという3つのプロパティ名があります。これらは3つの整数です。 Lastviewedbyname、Lastupdatedbyname、LastRespondedByname、およびdisputeという名前のプロパティを持つviewmodel 'disputeviewmodel'を作成しました。今、私のリポジトリ関数は紛争の一覧を返します。このリストをどのようにdisputeviewmodelのListに変換して、これらの3つのプロパティーが名前で満たされるようにしますか?ビューモデルを記入する方法EF 4.1

お勧めします。

答えて

0

あなたのビューモデルは本当にdisputeという名前のプロパティを必要としません。ビューモデルはドメインモデルを参照すべきではありません。

限りマッピングが懸念しているように、1つの可能性は、手動でそれを行うにはしかし、それはすぐに、より複雑なモデルで厄介になる可能性がある:

public ActionResult Foo() 
{ 
    IEnumerable<disputes> disputes = ... fetch from repo 
    IEnumerable<disputeviewmodel> disputeViewModels = disputes.Select(x => new disputeviewmodel 
    { 
     Lastviewedbyname = x.Lastviewedby, 
     Lastupdatedbyname = x.Lastupdatedby, 
     LastRespondedByname = x.LastRespondedBy 
    }); 
    return View(disputeViewModels); 
} 

だから、より良いアプローチはAutoMapperを使用することです:

public ActionResult Foo() 
{ 
    IEnumerable<disputes> disputes = ... fetch from repo 
    IEnumerable<disputeviewmodel> disputeViewModels = Mapper.Map<IEnumerable<disputes>, IEnumerable<disputeviewmodel>>(disputes); 
    return View(disputeViewModels); 
} 
+0

あなたの迅速な対応に感謝します。 disputeViewModelsのLastviewedbyname、Lastupdatedbyname、LastRespondedBynameはどのように埋められますか?紛争にはそれがないためです。私はLastviewedby、Lastupdatedby、紛争のLastRespondedByを操作してのviewmodel – DotnetSparrow

+0

@DotnetSparrowのLastviewedbyname、Lastupdatedbyname、LastRespondedBynameを入力する必要があり、それはあなたのデータベースアクセス層が心配すべきものです。結合はそこで実行する必要があります。リポジトリは、必要なすべての情報を含むドメインモデルを返す必要があります。そのため、集約ルートごとにリポジトリを定義することは常に良い考えです。 –

+0

AutoMapperを使用すると、LastviewedByname、Lastupdatedbyname、ViewModelのLastRespondedBynameは空になりますか?紛争にはこれらの特性がないためです。 – DotnetSparrow

0

あなたの紛争はなぜそのように見えませんか?

class Dispute 
{ 
    public User LastViewedBy; 
    public User Lastupdatedbyname 
    public User LastRespondedByname 
} 

これはどのように見えるかです。その後、問題は解決しました。 Disputesのクエリを実行すると、既にユーザー名(そこにユーザー名)が用意されています。

+0

紛争テーブルに名前がありません。それはIdsを保持する。ビューモデルでは条件付きで名前が必要です。 Like dispute.usertype = 1 then lastViewedBy = PersonName else lastViewedBy = BusinessName – DotnetSparrow

+0

さて、まずコードを使用しています。データベースはPOCOエンティティに基づいて生成されます。私の例のように紛争を作成する場合、テーブルにはIDも含まれますが、紛争のためにクエリを実行すると、あなたのためにジョインが行われます。私はPersonName、BusinessNameをどこから取得するのか分かりません。 –

関連する問題