标签: npgsql

.NET6 和日期时间问题。无法将 Kind=UTC 的 DateTime 写入 PostgreSQL 类型“不带时区的时间戳”

我有共同的问题。

无法将 Kind=UTC 的 DateTime 写入 PostgreSQL 类型“不带时区的时间戳”

我想启用旧版时间戳行为,如下所示: https: //github.com/npgsql/doc/blob/main/conceptual/Npgsql/types/datetime.md/

public MyDbContext(DbContextOptions<MyDbContext> contextOptions) : base(contextOptions)
        {
            AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
            AppContext.SetSwitch("Npgsql.DisableDateTimeInfinityConversions", true);
        }
Run Code Online (Sandbox Code Playgroud)

但不起作用。我仍然遇到同样的错误。

我做错了什么。为什么遗留行为不起作用?

c# npgsql .net-6.0

87
推荐指数
8
解决办法
12万
查看次数

无法加载 System.Threading.Tasks.Extensions

我有一个基于 .net 框架 4.5.1 的 Web 项目。我们正在尝试为该项目添加 PostgreSQL 支持。使用 Nuget,我已经为项目安装了 4.0.4 npgsql。在参考下,我看到以下内容被添加到项目中。

  1. Npgsql - 4.0.4.0 - 运行时版本 v4.0.30319
  2. System.Threading.Tasks.Extensions - 4.2.0.0 - 运行时版本 v4.0.30319

当我尝试运行项目并连接并从数据库中获取数据时,出现以下错误,提示 FileNotFoundException:

    System.TypeInitializationException
      HResult=0x80131534
      Message=The type initializer for 'com.rsol.RConfig' threw an exception.
      Source=RConfig
      StackTrace:
       at com.rsol.RConfig.getInstance() in C:\Workspaces\PS\RConfig\RConfig.cs:line 1113
       at RAdmin.Global.Application_Start(Object sender, EventArgs e) in C:\Workspaces\PS\RAdmin\Global.asax.cs:line 528

    Inner Exception 1:
    TypeInitializationException: The type initializer for 'com.rsol.Db.DbMgr' threw an exception.

    Inner Exception 2:
    FileNotFoundException: Could not load file or assembly 'System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of …
Run Code Online (Sandbox Code Playgroud)

c# npgsql nuget

26
推荐指数
3
解决办法
3万
查看次数

"WHERE x IN"子句与dapper和postgresql抛出42601:语法错误在"$ 1"处或附近

我有一个字符串数组,我想要一个包含IN子句的查询,如:

"... WHERE t.name IN ('foo', 'bar', 'baz')..>"
Run Code Online (Sandbox Code Playgroud)

这是我的查询的最后一位,其中包含"where in X in"子句:

...
left join genre_tag_band_join tj on hb.id = tj.band_id or ob.id = tj.band_id
left join genre_tags t on tj.genre_tag_id = t.id
inner join venues v on e.venue_id = v.id

where t.name IN @tagsParam...
Run Code Online (Sandbox Code Playgroud)

我像这样做一个Dapper电话

var shows = con.Query<Event, Band, Band, GenreTag, Venue, Event>(query, (e, hb, ob, gt, v) =>
{
    Event show;
    ...
    return e;
},
new { tagsParam = tagsArr}).AsQueryable();
Run Code Online (Sandbox Code Playgroud)

其中tagsArr是一个字符串[].

我得到例外:

{"42601:语法错误位于或附近\"$ 1 \""}

c# postgresql asp.net-mvc npgsql dapper

18
推荐指数
1
解决办法
2055
查看次数

如何将参数传递给sql'in'语句?

我想创建此查询:

select * from products where number in ('123', '234', '456');
Run Code Online (Sandbox Code Playgroud)

但我找不到任何使用Npgsql和NpgsqlParameter实现此功能的示例.我试过这样的:

string[] numbers = new string[] { "123", "234" };

NpgsqlCommands cmd = new NpgsqlCommands("select * from products where number in (:numbers)");
NpgsqlParameter p = new NpgsqlParameter("numbers", numbers);
command.Parameters.Add(p);
Run Code Online (Sandbox Code Playgroud)

但它没有用;)

c# postgresql ado.net npgsql

15
推荐指数
1
解决办法
1万
查看次数

关闭后连接仍然空闲

我有一个C#客户端应用程序需要每15分钟检查一次Postgres数据库上的表.问题是我需要将此客户端安装到或多或少200个客户端,因此我需要在查询后关闭数据库连接.

我使用.Close()方法但是,如果我检查Postgres DB上的pg_stat_activity表,我可以看到连接仍处于IDLE状态.我该如何解决这个问题?是否有可能完全关闭连接?

谢谢,安德烈

c# postgresql npgsql

15
推荐指数
1
解决办法
5779
查看次数

如何添加可在Visual Studio中访问的自定义数据库提供程序?

我想在Visual Studio中使用自定义数据库提供程序.我需要它来使用实体框架.

例如,我下载了NpgSQL,在GAC中注册了它们:

gacutil  -i  c:\temp\npgsql.dll
gacutil  -i  c:\temp\mono.security.dll
Run Code Online (Sandbox Code Playgroud)

并添加到machine.config文件:

<add name="Npgsql Data Provider"
invariant="Npgsql"  support="FF"
description=".Net Framework Data Provider for Postgresql Server"
type="Npgsql.NpgsqlFactory, Npgsql, Version=2.0.6.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" />
Run Code Online (Sandbox Code Playgroud)

但是Npgsql没有出现在Visual Studio的数据源列表中:

VS中的数据源

如何将自定义数据库提供程序添加到此列表?

UPD:如果我使用命令字符串edmgen.exe我得到错误:

错误7001:无法找到或加载已注册的.Net Framework数据提供程序.

postgresql npgsql visual-studio dbproviderfactories

14
推荐指数
1
解决办法
1万
查看次数

PostgreSQL - 返回键值对数组的最佳方法

我正在尝试选择一些字段,其中一个字段需要是一个数组,数组的每个元素都包含两个值.每个数组项都需要包含名称(字符变化)和ID(数字).我知道如何返回单个值的数组(使用ARRAY关键字),但我不确定如何返回一个对象的数组,该对象本身包含两个值.

查询是这样的

SELECT
    t.field1,
    t.field2,
    ARRAY(--with each element containing two values i.e. {'TheName', 1 })
FROM MyTable t
Run Code Online (Sandbox Code Playgroud)

我读到一种方法是通过选择一个类型的值,然后创建该类型的数组.问题是,函数的其余部分已经返回一个类型(这意味着我会有嵌套类型 - 是吗?如果是这样,你将如何在应用程序代码中读回这些数据 - 即使用像NPGSQL这样的.Net数据提供程序?)

任何帮助深表感谢.

sql database postgresql npgsql

14
推荐指数
2
解决办法
1万
查看次数

实体框架核心jsonb列类型

我正在使用Entity Framework Core和npgsql postgresql来实现Entity Framework Core.

我的问题是,使用迁移,如何标记类属性以生成JSONB列类型?

例如:

public class MyTableClass
{
    public int Id { get; set; }

    // My JSONB column
    public string Data { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

c# postgresql npgsql entity-framework-core

13
推荐指数
2
解决办法
5741
查看次数

在服务提供程序上调用了“AddEntityFramework*”,但在 DbContext 选项配置中未调用“UseInternalServiceProvider”

我正在将 ASP.NET Core 应用程序从 Framework 2.2 升级到 3.1。它还使用实体框架核心。

在 Startup.ConfigureServices 方法中,有这样一段代码:

services.AddEntityFrameworkNpgsql()
    .AddDbContext<MainDbContext>(options => options
        .UseNpgsql(Configuration.GetConnectionString("MainDbContext")));
Run Code Online (Sandbox Code Playgroud)

.NET Core 2.2 一切正常。使用 .NET Core 3.1,我在每次应用程序启动时都会收到此警告:

在服务提供程序上调用了“AddEntityFramework*”,但在 DbContext 选项配置中未调用“UseInternalServiceProvider”。删除“AddEntityFramework*”调用,因为在大多数情况下它是不需要的,并且可能会导致与在同一服务提供商中注册的其他产品和服务发生冲突。

查找UseInternalServiceProvider方法,看起来应该在上调options用以传递主要服务提供者。不幸的是,此时服务提供者还不存在。它即将建成。

我不明白问题是什么以及这个警告想告诉我什么,但没能做到。我怎样才能让那个警告消失?网络还不知道这条消息。

c# npgsql entity-framework-core .net-core asp.net-core

13
推荐指数
1
解决办法
4313
查看次数

Npgsql:从池中获取连接时超时

背景:我正在将我的应用程序从mssql移动到npgsql v2.0.11.92.运行我的应用程序几分钟或几小时后,我得到一个System.Exception:从池中获取连接时超时.

我在x64平台的x86环境中使用lib版本2.0.11.92.最迟关闭所有连接并将其置于finally块中,但过了一段时间后,我收到错误.所以,它应该是Npgsql库的问题.

在我的应用程序中,每隔几秒就会在后台发生很多查询,但大多数情况下,它们只是按顺序运行,而不是在并行运行.

我使用的连接字符串是:SERVER = mydbserver; MINPOOLSIZE = 3; MaxPoolSize = 15; ConnectionLifeTime = 7; DATABASE =测试DB; UID =用户; PWD =通过

我正在尝试诊断npgsql中泄漏的postgres连接.

仅供参考:Npgsql库已经出现了泄漏问题,已在最新版本2.0.11.92中修复.但我认为仍有一些问题.

有没有人遇到过与当前库版本(npgsql v2.0.11.92)类似的问题?

connection connection-pooling npgsql postgresql-9.1

12
推荐指数
1
解决办法
9800
查看次数