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を();
を私はここに行方不明です何を次のように
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
//Burası da önemli.
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
}
しかし、私が見ることができる唯一のページが空白の画面がありますか?前もって感謝します。
データ?データを入力しましたか? – NightOwl888
はい、データベース内に4つの製品があります。 – tahasozgen