MVC3使用Entity Framework 4选择一对多的相关数据

时间:2011-07-14 14:43:55

标签: asp.net-mvc-3 entity-framework-4 repository entity

我正在使用MVC3与实体框架4和存储库模式,并寻找有关选择相关实体的最佳方法的建议。

我一直在阅读以下教程

http://www.asp.net/entity-framework/tutorials/reading-related-data-with-the-entity-framework-in-an-asp-net-mvc-application

由于这不是使用存储库模式,因此我很难理解如何设置它,例如,此代码包含在控制器中(在上面的示例中),

public ViewResult Index()
{
var instructors = db.Instructors.Include(i => i.OfficeAssignment);
return View(instructors.ToList());
}

我使用存储库,带有接口ICustomerRepository,以及接口的具体实现。我应该在哪里用include语句构造LINQ查询,如果我尝试在我的存储库的实现中执行此操作(我假设它应该保持控制器清洁的地方)我得到错误,说明无法转换lambda表达式输入字符串。

这是我的存储库实现中的代码,

namespace CustomerOrders.Domain.Concrete
{
    public class EFCustomerSiteRepository : ICustomerSiteRepository
    {
        private EFDbContext context = new EFDbContext();

        public IQueryable<CustomerSite> CustomerSites
        {
            get { return context.CustomerSites; }
        }
    }
}

这是我的实体,其中包含客户的导航属性。

namespace CustomerOrders.Domain.Entities
{
    public class CustomerSite
    {
        public int CustomerSiteId { get; set; }
        public int CustomerId { get; set; }
        public string AddressLine1 { get; set; }
        public string AddressLine2 { get; set; }
        public virtual Customer Custs { get; set; }

    }
}

这是我的实体框架上下文

public class EFDbContext : DbContext
{
    public DbSet<Customer> Customers { get; set; }
    public DbSet<CustomerSite> CustomerSites { get; set; }
}

选择与客户站点相关的实体(客户)的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

我相信你在另一个问题here

中得到了这个问题的答案

但是,将包含代码放在存储库中是更好的方法,可以将尽可能多的域逻辑保留在控制器之外。