2016-04-10 19 views
-1

ASP.NET MVCでEFを使用する基本的なWebサイトを実装しようとしています。簡単に言えば、私はSQLデータベースに接続してリストを作成しようとします。私はProductモデルを持っています。しかし、画面に何も来ません。ここに私のProductクラスがあります:SQL ServerからEntity Framework経由でデータを取得できません

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; } 
} 

プロジェクトでリポジトリパターンが使用されています。ここでインターフェイスIProductRepositoryは:

public interface IProductRepository 
{ 
    IQueryable<Product> Products { get; } 
} 

ここはプロジェクトのプロダクトコントローラです。これは、ソリューション全体で唯一のコントローラです:

public class ProductController : Controller 
{ 
    private IProductRepository repository; 

    public ProductController(IProductRepository productRepository) 
    { 
     this.repository = productRepository;   
    } 

    public ViewResult List() 
    { 

     //This is not the part of the original project. In order to make sure that the code interacts with 
     //the database. 
     if (repository.Products.Count() == 0) 
     { 

      NinjectControllerFactory nin = new NinjectControllerFactory(); 
      IKernel kernel = nin.GetNinjectKernel(); 

      this.repository = kernel.Get<IProductRepository>(); 
     } 

     return View(repository.Products); 
    } 

} 

デフォルトルートが設定されています。ここで私は私のローカル・データベースに接続List.cshtml

@model IEnumerable<Model.Product> 

@{ 
ViewBag.Title = "List"; 
} 

<h2>List</h2> 

@foreach (var p in Model) 
{ 
<div class="item"> 
    <h3>@p.Name</h3> 
    @p.Description 
    <h4>@p.Price.ToString("c")</h4> 
</div> 
} 

の含有量は、テーブルを定義し、それを取り込みます。私はプロジェクトのweb.configファイルに接続文字列を挿入:

は、名前= "EFDbContext" たconnectionString = "データソース =(localdb)を追加\ v11.0;初期カタログ= efver1;統合 セキュリティ=真

: "providerNameで=" System.Data.SqlClientの」

はここ

public class EFProductRepository : IProductRepository 
{ 
    private EFDbContext context = new EFDbContext(); 
    public IQueryable<Product> Products 
    { 
     get { return context.Products; } 
    } 
} 

、ここではEFDbContext.csあるEFProductRepository.csです

public class EFDbContext : DbContext 
{ 
    public DbSet<Product> Products { get; set; } 
} 

私は依存性インジェクタとしてNinjectを使用しています。ここでは、次のとおりです。

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>(); 
    } 

    public IKernel GetNinjectKernel()   
    { 
     return this.ninjectKernel; 
    } 
} 

が、私はここに必要な変更作られた: 保護された空のApplication_Start(){ AreaRegistration.RegisterAllAreasを();

result

を私はここに行方不明です何を次のように

 WebApiConfig.Register(GlobalConfiguration.Configuration); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 

     //Burası da önemli. 
     ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory()); 
    } 

しかし、私が見ることができる唯一のページが空白の画面がありますか?前もって感謝します。

編集1:;初期カタログ= efver1;統合を data

+0

データ?データを入力しましたか? – NightOwl888

+0

はい、データベース内に4つの製品があります。 – tahasozgen

答えて

1

は= "EFDbContext" たconnectionString = "データソース=(localdb)\ v11.0名を追加します。ここで は、ローカル・データベース内のデータでありますSecurity = True "providerName =" System.Data.SqlClient "

あなたは正しいデータベースに接続していません。スクリーンショットによると、あなたのデータはではなく、INT-0014\SQLEXPRESSです。