C# 使用实体框架查询错误,数据库表名错误
我想用C语言获取一些数据库数据。 但我的LINQ查询连接到无效的数据库表 DataContext.csC# 使用实体框架查询错误,数据库表名错误,c#,sql,linq,entity-framework,C#,Sql,Linq,Entity Framework,我想用C语言获取一些数据库数据。 但我的LINQ查询连接到无效的数据库表 DataContext.cs namespace BlackBoxSOS.Models { public class DataContext : DbContext { public DbSet<ServiceIdentification> ServiceIdentifications { get; set; } public DbSet<ObservationDatum>
namespace BlackBoxSOS.Models
{
public class DataContext : DbContext
{
public DbSet<ServiceIdentification> ServiceIdentifications { get; set; }
public DbSet<ObservationDatum> ObservationData { get; set; }
....
}
}
变量结果是选择[Extent1].[Id]作为[Id],[Extent1].[Res_Value]作为[Res_Value]
在执行我的代码时,从[dbo].[ObservationDatums]作为[Extent1]执行。但是DataContext有DbSet ObservationData,而不是ObservationDatums
为什么这个程序有错误?如何修复它?您可以通过将表属性应用于ObservationDatum类型,或者通过在DbContext中使用Fluent API重写ModelCreating,首先自定义实体框架代码使用的表名 e、 g: 或:
如果所有表名都是单数的,可以尝试在DbContext中使用以下代码禁用表名多元化:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
谢谢你的建议。但数据库表名是ObservationData。我更改了您建议的代码。但是,运行Update-database-ConnectionStringName MyConnection会出现错误,可能是参数@objname不明确,或者声明的@objtype列错误。我不知道我错过了什么。如果您要更改代码优先模型,那么您需要运行添加迁移来构建更改,然后更新数据库,除非您删除并重新创建了数据库。
[Table("ObservationData")]
public class ObservationDatum
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<ObservationDatum>().ToTable("ObservationData");
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}