0

ASP MVC 4 のローカル データベース (localdb\11.0v) でコード ファースト アプローチを使用しています。エンティティを作成しました。

public class Service
    {
        public int ServiceID { get; set; }
        public string ServiceName { get; set; }
    }

私のDbContext

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

私のリポジトリ

public interface IServiceRepository
    {
        IQueryable<Service> Service { get; }
    }

インターフェース

public class EFServiceRepository : IServiceRepository
    {
        private EFDbContext context = new EFDbContext();

        public IQueryable<Service> Service
        {
            get { return context.Service; }
        }
    }

バインディングにNinjectを使用しています

 ninjectKernel.Bind<IServiceRepository>().To<EFServiceRepository>();

ninjectカーネルバインドを参照するコントローラーを使用

public ActionResult List()
        {
            return View(repo.Service);
        }

したがって、これはすべてうまく機能しますが、私が望むようには機能しません。テーブル「サービス」からリストを取得しますが、テーブル「サービス」からデータを取得したいです。なぜこれが起こっているのかわかりません。私は変数名を複数形にしたので、それらは「サービス」でしたが、それは違いを生むべきではありません(そうすべきですか?)それが解決することを期待して、それらをすべて「サービス」に変更しました。ここまでは本当に理解できた気がします。

データベースには「ビジネス」ルールがあり、それらは単数形の名前である必要があります+「サービス」テーブルではなく「サービス」テーブルを使用している理由を本当に理解したいです。テストする「サービス」テーブルのみを追加しました。

4

2 に答える 2

0

テーブル名に関して Entity Framework の命名規則をオーバーライドするには、次の 2 つの方法があります。

1 つ目は、エンティティ クラスのデータ アノテーションによるものです。

[System.ComponentModel.DataAnnotations.Schema.Table("Service")]
public class Service
{
    ...

2 つ目は、コンテキスト クラス自体で流暢なマッピングを行う方法です。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Service>().ToTable("Service");
于 2013-05-19T17:16:41.247 に答える