如何手动创建数据库模型?

问题描述 投票:0回答:1

我有一个现有的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.QueryingEnumerable1.Enumerator.InitializeReader(DbContext _, Boolean result) at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlExecutionStrategy.Execute[TState,TResult](TState state, Func3操作上,Func3 verifySucceeded) at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable1.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](IQueryable1源)处在c:\ Development \ EFGetStarted \ Program.cs:line 17中的EFGetStarted.Program.Main(String [] args)异常数据:严重性:ERRORSQL状态:42P01MessageText:关系“ CDR”不存在位置:45文件:parse_relation.c线:894例程:parserOpenTable

c# postgresql entity-framework .net-core npgsql
1个回答
0
投票

尝试在上下文中更改DbSet'CDR'的名称以匹配数据库表的名称('CallDataRecord'?)。我见过的示例首先是针对PostgreSQL数据库或首先针对代码的数据库,都是以这种方式设置的,而错误消息是由于它正在寻找不存在的表CDR。

  public DbSet<CallDataRecord> YourDbTableName{ get; set; }
© www.soinside.com 2019 - 2024. All rights reserved.