实体框架 - SportsStore - 预订ASP.NET MVC 4 - 第7章

时间:2014-02-05 15:54:11

标签: asp.net-mvc-4 entity-framework-6

ASP.NET MVC4 - 第7章(Apres / Adam Freeman)Page 175

有人确实完成了这个例子吗?

我试图在书中做这个例子,是准备数据库一节下的部分。我面临的问题是View没有列出任何产品,我的Table Products有一些行,但视图没有显示任何内容。即使我注释掉了连接字符串,也没有显示任何错误。

我的产品类(SportsStore.domain)

    namespace SportsStore.Domain.Entities
{
    public class Product
    {
        public int ProductID { get; set; }
        public string Name { get; set; }
        public string  Description { get; set; }
        public decimal Price { get; set; }
        public string Category { get; set; }
    }
}

Ninject Factory

namespace SportsStore.WebUI.Infrastructure
{
    public class NinjectControllerFactory : DefaultControllerFactory
    {
        private IKernel ninjectKernel;

        public NinjectControllerFactory() {
            ninjectKernel = new StandardKernel();
            AddBindings();
        }

        protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
        {
            return controllerType == null
                ? null
                : (IController)ninjectKernel.Get(controllerType);
        }

        private void AddBindings()
        {


            ninjectKernel.Bind<IProductRepository>().To<EFProductRepository>();

        }
    }
}

Iproduct存储库

namespace SportsStore.Domain.Abstract
{
    public interface IProductRepository
    {
        IQueryable<Product> Products { get; }
    }
}

3 个答案:

答案 0 :(得分:1)

好的,所以我也在与这一个斗争的公共汽车,并在网上搜索了2天,我想出了一个工作,让一切都显示出来。

本书要求您在第181页的Web.Config文件中添加连接字符串,该字符串将替换默认值。

<connectionString> <add name="EFDbContext"... /> </connectioString>

这本书要求采用“Code First”方法。我无法让它工作,所以我使用“数据库优先”方法explanation of the two methods采用了不同的方法。

为此,您必须在前一个Web.config文件中更改数据库的路径

<add name="EFDbContext" connectionString="Data Source=(localdb)\v11.0;Initial Catalog=SportsStore;Integrated Security=True" providerName="System.Data.SqlClient" />

到此

    <add name="EFDbContext" connectionString="Data Source=YourDataBaseHere;Initial Catalog=SportsStore;Integrated Security=True" providerName="System.Data.SqlClient"/>

您可以通过右键单击所需的DB并选择属性来获取连接路径,它将是标记为连接字符串的那个。

我希望这也可以帮助其他正在阅读本书的人!

答案 1 :(得分:0)

我自己造成了这个问题,因为我在创建EFDbContext类时忘了继承DbContext。

答案 2 :(得分:0)

IProductRepository interface has IEnumerable<Product>Products{get;}