public ViewResult List(string category,int page = 1)
{
ProductsListViewModel viewModel = new ProductsListViewModel
{
Products = repository.Products
.Where(p => category == null || p.Category == category)
.OrderBy(p => p.ProductID)
.Skip((page - 1) * PageSize)
.Take(PageSize),
PagingInfo = new PagingInfo
{
CurrentPage = page,
ItemsPerPage = PageSize,
TotalItems = category == null?repository.Products.Count():repository.Products.Where(e => e.Category == category).Count()
},
CurrentCategory = category
};
return View(viewModel);
}
它抛出一个异常,说“找不到SportsStore.Domain.Concrete.ORM.Product的概念模型类型。” 我想这与我手动添加的SportStore.edmx文件有关,但是这本书只是提到了这个文件,就好像它已经存在一样,实际上并非如此。所以我必须自己创建ORM,然后抛出异常。我不知道如何检查这个问题,thx ..
答案 0 :(得分:0)
我也阅读了这本书(Pro Asp.Net MVC 3 Framework)并发现了相同的错误/问题。
似乎作者从使用ObjectContext
切换到'DbContext'(或者反过来)并没有清理他的例子。前者是来自EntityFramework 4.0的旧API,后者是来自4.1的API。 DbContext
也只是ObjectContext
的包装器,所以他们做同样的事情。
如果查看第10章的代码示例,您可以看到他使用实体数据模型(.edmx)来建立数据库和模型之间的连接,而在整本书中,他使用了“代码 - 第一个'与DbContext
接近。
事实上,第9章中的这一部分是他唯一一次提到Concrete/ORM
文件夹和这个.edmx模型,这进一步证明了这是本书前一次迭代留下的内容。
总结:您不需要此.edmx模型文件,您无需更新概念模型。该框架应该能够将代码中Product
模型的各个部分连接到数据库中的Product表。
这是一个可能提供一些见解的相关问题: Using DbContext and Database First in EF 4.1