我在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名称复数,所以他们是“服务”,但这不应该有所作为(应该吗?)我把它们全部改为“服务”,希望能解决它。我真的觉得我到现在才明白这一切。
我们有db的“业务”规则,它们需要是单数名称+我真的想了解它为什么使用“服务”表而不是“服务”表。我只添加了“服务”表进行测试。
答案 0 :(得分:6)
首先,您需要将此代码添加到“使用”EFDbContext类的块:
using System.Data.Entity.ModelConfiguration.Conventions
然后将此代码添加到EFDbContext类:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
答案 1 :(得分:0)
有两种不同的方法可以覆盖实体框架的表名称的命名约定:
首先是通过实体类的数据注释:
[System.ComponentModel.DataAnnotations.Schema.Table("Service")]
public class Service
{
...
其次是通过上下文类本身的流畅映射:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Service>().ToTable("Service");