ASP.net MVC.2如何在存储库接口中定义多个类型的集合

时间:2011-06-28 14:47:52

标签: asp.net-mvc-2 interface repository viewmodel

我试图将列表返回到包含来自两个表的数据的显示模板,我正在使用存储库模式,以及一个viewmodel,用于将数据从返回两个对象的LINQ查询传递给视图

是否在界面中定义了多个类型的集合? 对于我在界面中使用过的单一类型,

    IQueryable<CustomerSite> CustomerSites { get; }

然后我在存储库中有我的linq查询

public IQueryable<CustomerSite> CustomerSites
    {
        get { return customerSitesTable; }
    }

但是,由于此新查询将包含两种类型(客户和客户站点),如何在界面中定义此集合?

== UPDATE

我尝试过使用.Include(这会抛出一条错误,指出Customer实体中没有include的定义,不确定我是否缺少名称空间?)

我也尝试过创建自定义界面

public interface ICustomersAndSitesRepository
{
    IQueryable<CustomerSite> CustomerSites { get; }
    IQueryable<Customer> Customers { get; }
    IQueryable<ICustomersAndSitesRepository> CustomerAndSites { get; }
}

存储库中的此方法

public IQueryable <ICustomersAndSitesRepository> CustomerAndSites
    {
        get { return CustomerAndSites; }
    }

然而,当我尝试将集合传递给控制器​​中的视图时,

public ViewResult List([DefaultValue(1)] int page)
    {

        var customersWithSitesToShow = customersAndSitesRepository.CustomerAndSites;
        var viewModel = new CustomerSitesListViewModel
        {                
            Customers = customersWithSitesToShow.Skip((page - 1) * PageSize).Take(PageSize).ToList(),
            PagingInfo = new PagingInfo
            {
                CurrentPage = page,
                ItemsPerPage = PageSize,
                TotalItems = customersWithSitesToShow.Count()
            }
        };

        return View(viewModel);  //Passed to view as ViewData.Model (or simply model)
    }

我收到了一个转换错误,重新将视图转换为视图模型

Cannot implicitly convert type  'System.Collections.Generic.List<CustomerDatabase.Domain.Abstract.ICustomersAndSitesRepository>' to 'System.Collections.Generic.IEnumerable<CustomerDatabase.WebUI.Models.CustomerViewModel>'. An explicit conversion exists (are you missing a cast?)  

我定义了像

这样的viewmodel

public IEnumerable Customers {get;组; }

有人可以指出我正确的方向吗?

2 个答案:

答案 0 :(得分:0)

如何返回一个IQueryable自定义界面,其中包含您需要的每个集合的属性?

public interface ICustomersAndSites
{
  IQueryable<CustomerSite> CustomerSites{get;}
  IQueryable<Customers> Customers{get;}
}

然后您可以在存储库中设置它:

public IQueryable<ICustomersAndSites> CustomerAndSites
    {
        get { return combinationObject; }
    }

答案 1 :(得分:0)

假设Customer有多个CustomerSite,那么您将返回IQueryable<Customer>,但使用.Include返回CustomerSites Customer }。

e.g。

public IQueryable<Customer> GetCustomersAndSites()
{
    return MyEntities.Customers.Include("CustomerSite");
}