使用实体框架查询数据库表名错误



我想用c#获取一些数据库数据。但是我的LINQ查询连接了无效的数据库表。

DataContext.cs

namespace BlackBoxSOS.Models
{
  public class DataContext : DbContext 
  {
    public DbSet<ServiceIdentification> ServiceIdentifications { get; set; }
    public DbSet<ObservationDatum> ObservationData { get; set; }
    ....
  }
}

Function In Service.svc.cs

public GetObservationResponseTypeMessage GetObservation(GetObservationTypeMessage request)
    {
        DataContext dataContext = new DataContext();
            var result = dataContext.ObservationData;
            ....
        return ...;
    }

变量结果为"SELECT [Extent1]"。[Id] AS [Id], [Extent1]。[Res_Value] AS [Res_Value]从[dbo]。[ObservationDatums] AS [Extent1]"当执行我的代码时。但是DataContext有DbSet ObservationData,而不是ObservationDatums。

为什么这个程序有错误?我怎样才能修好它?

您可以首先通过将table属性应用到ObservationDatum类型或使用Fluent API(在DbContext中重写OnModelCreating)来定制实体框架代码使用的表名。

例如:

[Table("ObservationData")]
public class ObservationDatum
{
}

或:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<ObservationDatum>().ToTable("ObservationData");
}

如果所有表名都是单数,可以尝试在DbContext中使用以下代码禁用表名的复数化:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}

相关内容

  • 没有找到相关文章

最新更新