さて、Customer オブジェクト モデルを受け取る、厳密に型指定された Customer "Details" ビューがあります。
私は LINQ to SQL を使用しており、すべての顧客が複数の (駐車場) スペースを持つことができます。
これはデータベース内の FK 関係であるため、LINQ で生成された Customer モデルには "Spaces" コレクションがあります。すごい!
これは CustomerRepository のコード スニペットで、顧客の駐車スペースを繰り返し処理して、すべての支払い、駐車スペース、最後に顧客を削除します。
public void Delete(Customer customer)
{
foreach (Space s in customer.Spaces)
db.Payments.DeleteAllOnSubmit(s.Payments);
db.Spaces.DeleteAllOnSubmit(customer.Spaces);
db.Customers.DeleteOnSubmit(customer);
}
すべてが期待どおりに機能します!
「詳細」ビューで、テーブルに顧客のスペースを入力します。
<% foreach (var s in Model.Spaces)
{ %>
<tr>
<td><%: s.ID %></td>
<td><%: s.InstallDate %></td>
<td><%: s.SpaceType %></td>
<td><%: s.Meter %></td>
</tr>
<% } %>
次のエラーが表示されます。
'System.Data.Linq.EntitySet' には 'GetEnumerator' のパブリック定義が含まれていないため、foreach ステートメントは 'System.Data.Linq.EntitySet' 型の変数を操作できません。
最後に、このコードを Customer 部分クラスに追加し、ビューで foreach を使用して ParkingSpaces を反復処理すると、すべてが期待どおりに機能します。
public IEnumerable<Space> ParkingSpaces
{
get
{
return Spaces.AsEnumerable();
}
}
ここでの問題は、繰り返したくないということです。ViewModel を使用して Spaces コレクションを View に渡すことも考えていましたが、LINQ は既に Customer モデルの Spaces プロパティを推測して作成しているので、それを使用するのが最もクリーンだと思います。
私は単純なものを見逃していますか、それとも間違ってアプローチしていますか?
ありがとう!