Luc*_*Sam 5 entityset linq-to-sql asp.net-mvc-2
好的,所以我有一个强类型的客户"详细信息"视图,它采用Customer对象模型.
我正在使用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);
}
Run Code Online (Sandbox Code Playgroud)
一切都按预期工作!
现在在我的"详细信息"视图中,我想用客户的空间填充表格:
<% foreach (var s in Model.Spaces)
{ %>
<tr>
<td><%: s.ID %></td>
<td><%: s.InstallDate %></td>
<td><%: s.SpaceType %></td>
<td><%: s.Meter %></td>
</tr>
<% } %>
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
foreach语句不能对'System.Data.Linq.EntitySet'类型的变量进行操作,因为'System.Data.Linq.EntitySet'不包含'GetEnumerator'的公共定义
最后,如果我将这段代码添加到我的Customer部分类中并使用视图中的foreach迭代ParkingSpaces,一切都按预期工作:
public IEnumerable<Space> ParkingSpaces
{
get
{
return Spaces.AsEnumerable();
}
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是我不想重复自己.我也在想我可以使用ViewModel将Spaces集合传递给View,但是LINQ已经推断并在Customer模型上创建了Spaces属性,所以我认为只使用它是最干净的.
我错过了一些简单的事情,或者我是否正确地接近这个?
谢谢!
小智 14
很抱歉,如果我有点迟到回答这个问题,但解决问题的正确方法是在web.config文件中添加一个程序集引用,以便视图可以访问GetEnumerator()方法.您可以使用页面补偿错误中提供的程序集引用字符串来执行此操作.例如
<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
| 归档时间: |
|
| 查看次数: |
7179 次 |
| 最近记录: |