Asp.net mvc 实体框架ASP MVC 4,引用了错误的表

Asp.net mvc 实体框架ASP MVC 4,引用了错误的表,asp.net-mvc,entity-framework,code-first,Asp.net Mvc,Entity Framework,Code First,我在ASP MVC 4中对本地数据库(localdb\11.0v)使用代码优先的方法。我已经创建了我的实体 public class Service { public int ServiceID { get; set; } public string ServiceName { get; set; } } 我的数据库上下文 public class EFDbContext : DbContext { public DbSe

我在ASP MVC 4中对本地数据库(localdb\11.0v)使用代码优先的方法。我已经创建了我的实体

public class Service
    {
        public int ServiceID { get; set; }
        public string ServiceName { get; set; }
    }
我的数据库上下文

public class EFDbContext : DbContext
    {
        public DbSet<Service> Service { get; set; }
    }
所以这一切都是好的,但它不工作的方式,我希望它。它从表“Services”中提取列表,但我希望它从表“Service”中提取数据。我不明白为什么会这样。我的var名称是复数的,所以它们是“服务”,但这不应该有什么区别(应该吗?),我把它们都改为“服务”,希望能解决这个问题。我真的觉得直到现在我才明白这一切


我们有db的“业务”规则,它们必须是单数名称+我真的想理解为什么它使用“服务”表而不是“服务”表。我只添加了要测试的“Services”表。

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

using System.Data.Entity.ModelConfiguration.Conventions
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{    
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
然后将此代码添加到EFDbContext类中:

using System.Data.Entity.ModelConfiguration.Conventions
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{    
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{    
modelBuilder.Conventions.Remove();
}

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

using System.Data.Entity.ModelConfiguration.Conventions
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{    
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
然后将此代码添加到EFDbContext类中:

using System.Data.Entity.ModelConfiguration.Conventions
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{    
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{    
modelBuilder.Conventions.Remove();
}

有两种不同的方法可以覆盖实体框架的命名约定wrt表名:

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

[System.ComponentModel.DataAnnotations.Schema.Table("Service")]
public class Service
{
    ...
第二种是通过上下文类本身的流畅映射:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Service>().ToTable("Service");
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().ToTable(“服务”);

有两种不同的方法可以覆盖实体框架的命名约定wrt表名:

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

[System.ComponentModel.DataAnnotations.Schema.Table("Service")]
public class Service
{
    ...
第二种是通过上下文类本身的流畅映射:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Service>().ToTable("Service");
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().ToTable(“服务”);

您好,谢谢您的快速回复。ModelBuilder是我应该使用的参考资料的一部分吗?还是我应该为它创建一个类(如果这是一个noob问题,很抱歉,我已经这么做了很长时间)不是真的。我已经添加了代码,我得到了它的参考资料,但我不确定它所说的(ModelBuilder ModelBuilder)“找不到名称空间名称ModelBuilder的类型,是否缺少程序集引用Elet us Hi,感谢您的快速回复。ModelBuilder是我应该使用的引用的一部分吗?还是我应该为其创建一个类(如果这是一个noob问题,很抱歉,已经这么做了很长时间)不完全是。我已经添加了代码,我得到了一个参考,但是我不确定它所说的(ModelBuilder ModelBuilder)“找不到名称空间名称ModelBuilder的类型,是否缺少程序集引用请删除我们,因此即使您在代码中定义了表名,命名约定也会命中多个表?这似乎很古老,您在代码中不定义表名,只定义类名。将它们转换为多个表只是一种约定。”(如Bappi Datta所示)。因此,命名约定是,即使您在代码中定义了表名,也要使用复数表?这似乎很古老,您在代码中不定义表名,只定义类名。将它们转换为复数表只是一种约定(如Bappi Datta所示)。