Как создать модель базы данных вручную? - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть существующая база данных 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};");
}
    ...

Это подробное исключение из отладки окно консоли:

Необработанное исключение. Npg sql .PostgresException (0x80004005): 42P01: отношение "CDR" не существует в Npg sql .NpgsqlConnector. <> C__DisplayClass160_0. d.MoveNext () --- Конец трассировки стека от предыдущего местоположения, где было сгенерировано исключение --- в Npg sql .NpgsqlConnector. <> c__DisplayClass160_0. d.MoveNext () --- Конец трассировки стека от предыдущего местоположения, где было сгенерировано исключение --- в Npg sql .NpgsqlDataReader.NextResult (Boolean asyn c, Boolean isConsuming) в Npg sql .NpgsqlDataReader.NextResult () в Npg sql .NpgsqlCommand.ExecuteReaderAsyn c (поведение CommandBehavior, логическое асинхронное c, CancellationToken cancellationToken) в Npg sql .NpgsqlCommand.ExecuteReader (поведение CommandBehavior) в Npg *. Поведение CommandBehavior) в System.Data.Common.DbCommand.ExecuteReader () в Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader (RelationalCommandParameterObject параметрObject) в Microsoft.EntityFrameworkCore.Query.330. 1014 * 1.Enumerator.MoveNext () в System.Linq.Enumerable.Single [TSource] (источник IEnumerable 1 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) в EFGetStarted.Program.Main (String [] args) в c: \ Development \ EFGetStarted \ Program.cs: строка 17 Данные об исключении: Серьезность: ERROR SqlState: 42P01 MessageText: отношение "CDRs" не существует Позиция: 45 Файл: parse_relation. c Строка: 894 Подпрограмма: parserOpenTable

1 Ответ

1 голос
/ 03 февраля 2020

Попробуйте изменить имя вашего CDRs DbSet, чтобы оно совпадало с именем вашей таблицы базы данных (CallDataRecord?) В контексте. Пример, который я видел для базы данных PostgreSQL first или code first, настроен таким образом, и сообщение об ошибке вызвано поиском несуществующих таблиц CDR.

  public DbSet<CallDataRecord> YourDbTableName{ get; set; }
...