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

所以这一切都很好,但它并没有按照我想要的方式工作。它从“服务”表中提取一个列表,但我希望它从“服务”表中提取数据。我不明白为什么会这样。我确实有复数的 var 名称,所以它们是“服务”,但这不应该有所作为(应该吗?)我将它们全部更改为“服务”,希望能解决它。我真的觉得我直到现在才理解这一切。

我们有数据库的“业务”规则,它们需要是单数名称+我真的很想了解它为什么使用“服务”表而不是“服务”表。我只添加了“服务”表进行测试。

4

2 回答 2

6

首先,您需要将此代码添加到 EFDbContext 类的“使用”块中:

using System.Data.Entity.ModelConfiguration.Conventions

然后将此代码添加到 EFDbContext 类中:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{    
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
于 2013-05-19T10:31:08.987 回答
0

有两种不同的方法可以覆盖 Entity Framework 的表名命名约定:

首先是通过实体类上的数据注解:

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

其次是通过上下文类本身的流畅映射:

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