Поддержание Linq to SQL при использовании ViewModels (ASP.NET MVC) - PullRequest
2 голосов
/ 04 мая 2010

Я недавно начал использовать пользовательские ViewModels (например, CustomerViewModel)

public class CustomerViewModel
{
    public IList<Customer> Customers{ get; set; }

    public int ProductId{ get; set; }

     public CustomerViewModel(IList<Customer> customers, int productId)
     {
        this.Customers= customers;
        this.ProductId= productId;
     }

     public CustomerViewModel()
     {
     }
 }

... и теперь я передаю их на мой взгляд вместо самих коллекций (например, var Custs = repository.getAllCusts (id)), поскольку это кажется хорошей практикой.

Проблема, с которой я столкнулся, заключается в том, что при использовании ViewModels; к тому времени, как он дошел до точки зрения, я потерял способность ленивой нагрузки на клиентов. Я не верю, что это имело место до их использования.

Можно ли сохранить возможность отложенной загрузки при использовании ViewModels? Или мне нужно загружать с помощью этого метода?

Спасибо, Кохан.

Ответы [ 2 ]

2 голосов
/ 04 мая 2010

Я полагаю, что ваш клиент L2S мешает загружать его свойства тем, что ваш DataContext удаляется вашим хранилищем.

Одним из решений является не распоряжение вашими DataContexts до тех пор, пока запрос не будет обработан - в Интернете существует довольно много шаблонов для решения этой проблемы.

Другой вариант - не использовать отложенную загрузку. Так как у вас есть коллекция клиентов, я бы сказал, что было бы неплохо охотно загрузить все, что вам нужно, в противном случае вы попадете в базу данных один раз за клиент

1 голос
/ 04 мая 2010

Технически, да, возможно выставить отложенную загруженную коллекцию на модели представления через свойство IEnumerable<>. Просто предоставьте метод get и попросите его выполнить запрос Linq-to-sql.

Однако я сам не добился большого успеха, потому что я предпочитаю выставлять коллекции на моделях представления через ReadOnlyObservableCollection<>. Использование этой коллекции напрямую должно загружать данные с нетерпением. Я могу представить себе создание коллекции, такой как ReadOnlyObservableCollection<>, которая обманывает и загружается только тогда, когда пользователь вызывает что-то, что требует этого (например, индексацию в коллекции), но я никогда не заботился о том, чтобы реализовать такую ​​вещь.

...