gpt4 book ai didi

c# - 当无法找到请求的 PostgreSQL 表时,如何捕获异常并使用错误代码?

转载 作者:行者123 更新时间:2023-11-29 12:04:46 25 4
gpt4 key购买 nike

我正在使用 Entity Framework,所以我相信我应该捕获 NpgsqlException,因为它是 PostgreSQL 的 .NET 数据提供程序。因此,假设我对上下文进行了查询。如果该表在 PostgreSQL 数据库中不存在,我想捕获抛出的异常,然后手动创建它。下面的代码是如何插入实体的示例,如果需要,我尝试使用错误处理来创建表:

try
{
return _context.Set(entityType).Add(entity);
}
catch (NpgsqlException)
{
CreateEntityTable(entity); //a private method I made
return _context.Set(entityType).Add(entity);
}

问题是:

  • 我不是 100% 确定我应该捕获 NpgsqlException

  • 我想确定如果抛出异常,那是因为表不存在。我查了一下the PostgreSQL documentation of error codes错误代码 42P01 是未定义的表。我相信我想使用它,但是如何使用呢?我查了一下the members of the NpgsqlException class ,然后我找到了 ErrorCode。但是,这是一个 int 类型。如果我能把上面的代码改成下面这样就好了

    try
    {
    return _context.Set(entityType).Add(entity);
    }
    catch (NpgsqlException ex)
    {
    if (ex.ErrorCode.Equals(42P01))
    {
    CreateEntityTable(entity); //a private method I made
    return _context.Set(entityType).Add(entity);
    }
    }

但我不确定这是否有意义(我什至不确定 42P01 怎么会是一个 int)。

如有任何帮助,我们将不胜感激。

最佳答案

您需要使用 NpgsqlException 的代码属性,因为它将包含 PostgreSql 错误代码。

更新您的示例:

try
{
return _context.Set(entityType).Add(entity);
}
catch (NpgsqlException ex)
{
if (ex.Code == "42P01")
{
CreateEntityTable(entity); //a private method I made
return _context.Set(entityType).Add(entity);
}
}

顺便说一句,我建议您不要在正常代码中执行模式更新。仅在安装程序或作为升级启动时执行此类操作。

关于c# - 当无法找到请求的 PostgreSQL 表时,如何捕获异常并使用错误代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31792345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com