2009-03-08 5 views
1

Entity Frameworkを使用しているASP.NET MVC RC2アプリケーションで作業しています。ASP.NET MVCビューから返されたときにオブジェクトに関連するエンティティを保持する方法

これは私のエンティティダイアグラムです。私のリポジトリに

Fi.1 http://img.skitch.com/20090308-t5mepq1hk1mju6gmuabrxbrr9c.png

は、私はこのようなエンティティを取得:

public Product GetProduct(int id) 
{ 
    return (from c in _entities.ProductSet.Include("User") 
      where c.Id == id 
      select c).FirstOrDefault(); 
} 

マイビュー:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<SampleApp.Models.Product>" %> 

編集製品

<h2>Edit product</h2> 

<%= Html.ValidationSummary("Edit was unsuccessful. Please correct the errors and try again.") %> 

<% using (Html.BeginForm()) {%> 

    <fieldset> 
     <legend>Fields</legend> 
     <p> 
      <label for="Id">Id:</label> 
      <%= Model.Id %> 
     </p> 
     <p> 
      <label for="Title">Title:</label> 
      <%= Html.TextBox("Title", Model.Title) %> 
      <%= Html.ValidationMessage("Title", "*") %> 
     </p> 
     <p> 
      <label for="Body">Body:</label> 
      <%= Html.TextBox("Body", Model.Body) %> 
      <%= Html.ValidationMessage("Body", "*") %> 
     </p> 
     <p> 
      <input type="submit" value="Save" /> 
     </p> 
    </fieldset> 

<% } %> 

<div> 
    <%=Html.ActionLink("Back to List", "Index") %> 
</div> 

問題と、私の質問は:「製品」の実体は、ポスト上の観点から返された場合、リンクされた実体「ユーザー」はnullです。それはなぜですか、これを回避する方法はありますか?

fig 2 http://img.skitch.com/20090308-minhefyq6gm9d7qhiihak6rqn6.png

答えて

4

productToEditは、フォームフィールドから移入新製品オブジェクトですので、あなたは、「回避策」についてUserエンティティ

を移入する方法をユーザーのためのフィールドを持っていない場合は、最初にdbから製品を取得し、productToEditの編集フィールドでこれを編集し、dbに保存します

+0

私はこれが、「新しい」というオブジェクトがビューから来ているケースだと思いました。自分のシナリオでユーザーを変更する必要はありません。ユーザーは、製品を誰が作成したかを追跡する関係にのみあります。この情報をありがとう、私はそれを回避します。 – jesperlind

1

モデル&永続性戦略を理解しているグラフをメモリに完全に読み込むことを理解するカスタムModelBinderを使用することもできます。

+0

有望な音がありますので、私はそれを調べます。私は上記の問題を、サービス内の編集機能に元のオブジェクトを付けることによって解決しました。このようにして、私は製品を作成するときと同じ検証を受けます。 (製品にはユーザーが必要) – jesperlind

関連する問題