ОК, поэтому у меня строго типизированное представление "Сведения" о клиенте, которое принимает объектную модель клиента.
Я использую LINQ to SQL, и у каждого Клиента может быть несколько мест для парковки.
Это отношение FK в базе данных, поэтому у моей модели клиента, сгенерированной LINQ, есть коллекция "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 уже выводит и создает свойство Spaces в модели Customer, поэтому я думаю, что было бы наиболее разумно просто использовать это.
Мне не хватает чего-то простого или я подхожу к этому неправильно?
Спасибо!