Entity Frameworkを使用してデータベースからデータを返すリポジトリを作成しましたが、このデータをビューに提供する必要がありますが、その前にこれらのオブジェクトをドメインモデル。MVCリポジトリ - ドメインモデルとエンティティモデル
私のスキーマは次のようになります。
Project
|
---->ProjectResources
|
---->Resource
私はプロジェクトを返すリポジトリを持っている:私はこのように見てしまったエンティティモデルを生成
TABLE Project
Id INT PRIMARY KEY
Name NVARCHAR(100)
TABLE Resource
Id INT PRIMARY KEY
FirstName NVARCHAR(100)
LastName NVARCHAR(100)
TABLE ProjectResources
Project_Id INT PRIMARY KEY -- links to the Project table
Resource_Id INT PRIMARY KEY -- links to the Resource table
public interface IProjectRepository
{
Project GetProject(int id);
}
コントローラアクション:
public ActionResult Edit(int id)
{
Project project = projectRepository.GetProject(id);
return View(project);
}
このデータを試してPOSTすると、これはうまく動作しないようです。 ProjectResourcesコレクションを再構築しようとしたときにEntityCollectionが既に初期化されたエラーが発生しました。
が、私は少し単純であるドメインモデルを作成するために、よりスマートだと思う:これは私も中間ProjectResourcesを持っていないので、少しよりよいように思わ
public class ProjectEdit
{
public string ProjectName { get; set; }
public List<ProjectResource> Resources { get; set; }
}
public class ProjectResource
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
- >リソースジャンプ。 ProjectResourceには必要なフィールドがあります。 が、私は私のリポジトリから自分のドメインモデルを返却するか、それがコントローラによって処理されるべき次のように私の質問がある
@foreach(var resoure in Model.Resources) {
@Html.DisplayFor(m => resource.FirstName);
}
:
私にできること@foreach(var resource in Model.ProjectResources) {
@Html.DisplayFor(m => m.Resource.FirstName)
}
:代わりのようなものを行います真ん中の他のクラス?それが私のプロジェクトをProjectEditにマップする何かによってコントローラ内で処理された場合、どうなっていますか?
私のリポジトリはエンティティモデルではなくドメインモデルを返す必要があると言っていますか? – Dismissile
リポジトリが別のサービス内にカプセル化されていない場合は、はい。 –