2017-05-16 8 views
1

これは私の最初のASPプロジェクトで、複数のテーブルをビューモデルに結合する方法に本当に苦労しています。私は新しいプロジェクトを作成し、それらをデータベースに挿入するために使用されるプロジェクトと呼ばれるモデルを持っています。これら2つのモデルをビューモデルに結合する方法

私は、各プロジェクトにいくつかのフィールドが関連付けられている静的テーブルをProjectStatusというDBに持っています。主にステータスとパーセント。

私がしようとしているのは、上のモデルの情報を取得し、ステータスを取得することです(projectstatusテーブルのパーセントはproject.status = projectstatus.idです)。

次に、結果をビューモデルに結合します。

これは簡単ですが、私は本当にこの作業を行う方法と苦労しています。

提案がありますか?

+0

EF Core Code Firstを使用していますか? – amrinea

+0

はい私は上記のモデルを作成し、ビュー、コントローラなどを作成したCRUDスカフォールディングを生成しました。テーブルを作成したマイグレーションは、新しいプロジェクトの作成、詳細の表示などで動作しているようでした。私はプロジェクトを表示し、ステータスを取得し、静的な "projectstatus"テーブルからパーセントフィールドを取得するフォーマットのテーブルにプロジェクトを表示します。 – spacerobot

+0

そのすべてのデータを1行(プロジェクト、ステータス、パーセントフィールド)に表示しますか? – amrinea

答えて

1

私の理解では、2つのテーブルを1つのビューモデルに入れたいと思っています。これを行うには、必要なプロパティで新しいビューモデルクラスを作成する必要があります。たとえば:

public class ProjectViewModel 
{ 
    public string ProjectName { get; set; } 
    public string Status { set; get; } 
    public int Percent { set; get; } 
} 

その後、LINQクエリを使用して一緒に2つのテーブルを結合することができ、このような新しいオブジェクトにそれらを選択します。

あなたのため、あなたProjectViewModelsのリストを作成する必要があります
var results = (from p in db.Project 
       join ps in db.ProjectStatus on p.Status equals ps.Id 
       select new ProjectViewModel() 
       { 
        ProjectName = p.ProjectName, 
        Status = ps.StatusName, 
        Percent = ps.PercentComplete 
       }).ToList(); 

あなたの視点で使うことができます。あなたの不動産または列名の一部が正しくない可能性があります。 ProjectStatusテーブルの内容を推測する必要がありました。

+0

私に戻ってくれてありがとう。 2つの質問。上記のコードでは、コントローラまたはviewmodelオブジェクトに入りますか?私はDB上でエラーが発生しています。名前 'db'が現在のコンテキストに存在しないことを示す。任意のアイデアを解決する方法は? – spacerobot

+0

dbは、DataContextオブジェクトへの参照です。あなたのプロジェクトでは何か違う名前が付けられているかもしれません。 'var results'コードはGetメソッドの中であなたのコントローラに入ります。 ViewModelは、好きな場所に保存できます。別のプロジェクトを作成する人もいれば、Modelsフォルダに入れることもできます。次に、現在のプロジェクトモデルが参照されている場合は、ProjectViewModelに変更する必要があります。これはコントローラとビューで発生します。 – amrinea

+0

ViewModelをデータベースに戻すことができないため、足場の足場のコードを更新用に使用することはできません。このページで更新が可能であると仮定すると、ProjectおよびProjectStatusオブジェクトを取得し、ProjectViewModelからのデータで更新する必要があります。 – amrinea

関連する問題