好的,所以我有一个采用客户对象模型的强类型客户“详细信息”视图。
我正在使用 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>
<% } %>
我收到以下错误:
foreach 语句无法对“System.Data.Linq.EntitySet”类型的变量进行操作,因为“System.Data.Linq.EntitySet”不包含“GetEnumerator”的公共定义
最后,如果我将这段代码添加到我的 Customer 部分类并使用视图中的 foreach 来遍历 ParkingSpaces,一切都会按预期工作:
public IEnumerable<Space> ParkingSpaces
{
get
{
return Spaces.AsEnumerable();
}
}
这里的问题是我不想重复自己。我还认为我可以使用 ViewModel 将 Spaces 集合传递给 View,但是 LINQ 已经推断并在 Customer 模型上创建了 Spaces 属性,所以我认为使用它是最干净的。
我遗漏了一些简单的东西,还是我错误地处理了这个?
谢谢!