我有一个现有的PostgreSQL数据库,由于脚手架无法工作,我想手动为表创建模型。为什么运行db.CDRs.First();
会引发异常?
Program.cs:
...
using (var db = new Model.CDRContext())
{
var cdr = db.CDRs.First(); // Exception has occurred here
}
...
CDRContext.cs:
...
public class CDRContext : DbContext
{
public DbSet<CallDataRecord> CDRs { get; set; }
string DB_SERVER = "127.0.0.1";
string USER = "x";
string PASSWORD = "x";
string DATABASE = "x";
int PORT = 3306;
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseNpgsql($"Host={DB_SERVER};Username={USER}; Port={PORT};Password={PASSWORD};Database={DATABASE};");
}
...
这是调试控制台窗口中的详细异常:
未处理的异常。 Npgsql.PostgresException(0x80004005):42P01:关系“ CDR”不存在在Npgsql.NpgsqlConnector。<> c__DisplayClass160_0。
d.MoveNext()---从之前引发异常的位置开始的堆栈结束跟踪---在Npgsql.NpgsqlConnector。<> c__DisplayClass160_0。 d.MoveNext()---从之前引发异常的位置开始的堆栈结束跟踪---在Npgsql.NpgsqlDataReader.NextResult(布尔异步,布尔isConsuming)在Npgsql.NpgsqlDataReader.NextResult()在Npgsql.NpgsqlCommand.ExecuteReaderAsync(CommandBehavior行为,布尔异步,CancelationToken cancelToken)在Npgsql.NpgsqlCommand.ExecuteReader(CommandBehavior行为)在Npgsql.NpgsqlCommand.ExecuteDbDataReader(CommandBehavior行为)在System.Data.Common.DbCommand.ExecuteReader()在Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject)在Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable 1.Enumerator.InitializeReader(DbContext _, Boolean result) at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlExecutionStrategy.Execute[TState,TResult](TState state, Func
3操作上,Func3 verifySucceeded) at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable
1.Enumerator.MoveNext()在System.Linq.Enumerable.Single [TSource](IEnumerable1 source) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query) at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult](Expression expression) at System.Linq.Queryable.First[TSource](IQueryable
1源)处在c:\ Development \ EFGetStarted \ Program.cs:line 17中的EFGetStarted.Program.Main(String [] args)异常数据:严重性:ERRORSQL状态:42P01MessageText:关系“ CDR”不存在位置:45文件:parse_relation.c线:894例程:parserOpenTable
尝试在上下文中更改DbSet'CDR'的名称以匹配数据库表的名称('CallDataRecord'?)。我见过的示例首先是针对PostgreSQL数据库或首先针对代码的数据库,都是以这种方式设置的,而错误消息是由于它正在寻找不存在的表CDR。
public DbSet<CallDataRecord> YourDbTableName{ get; set; }