【发布时间】:2011-09-02 10:22:21
【问题描述】:
我在 Silverlight 中有一个视图模型,它加载联系人,即:
_ContactsSource = new EntityList<ContactItem>(_ContactsDomainContext.ContactItems);
_ContactsLoader = new DomainCollectionViewLoader<ContactItem>(LoadCurrentCategoryContacts, LoadContactsCompleted);
_ContactsView = new DomainCollectionView<ContactItem>(_ContactsLoader, _ContactsSource);
public LoadOperation<ContactItem> LoadCurrentCategoryContacts()
{
var query = _ContactsDomainContext.GetContactsByCategoryIdQuery(CurrentContactCategory.Id);
query.IncludeTotalCount = true;
var op = _ContactsDomainContext.Load(query.SortAndPageBy(_ContactsView));
return op;
}
public void LoadContactsCompleted(LoadOperation<ContactItem> op)
{
if (op.HasError)
op.MarkErrorAsHandled();
else if (!op.IsCanceled)
{
_ContactsSource.Source = op.Entities;
if (op.TotalEntityCount > -1)
_ContactsView.SetTotalItemCount(op.TotalEntityCount);
}
}
还有一个域服务,其方法根据联系人的类别返回 DTO:
public IQueryable<ContactItem> GetContactsByCategoryId(int categoryId)
{
List<ContactItem> result = new List<ContactItem>();
Mapper.Map(_contactRepository.GetAll(x => x.ContactCategoryId == categoryId), result); //automapper
return result.AsQueryable();
}
问题是: 每次使用域服务时,它都会从数据库中获取所有表行(即 _ContactsView PageSize 设置为 10,“return result.AsQueryable();”中的结果将有 140 个元素),但只显示 10 个元素。
将 DomainCollectionView 与 wcf ria 服务 + 存储库模式一起使用的最佳方式是什么,这样所有的过滤和分页都将在服务器端进行,并且只会将必要的数据量返回给 silverlight?
谢谢!
【问题讨论】:
标签: silverlight repository-pattern wcf-ria-services