我有共同的问题。
无法将 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)
但不起作用。我仍然遇到同样的错误。
我做错了什么。为什么遗留行为不起作用?
我有一个基于 .net 框架 4.5.1 的 Web 项目。我们正在尝试为该项目添加 PostgreSQL 支持。使用 Nuget,我已经为项目安装了 4.0.4 npgsql。在参考下,我看到以下内容被添加到项目中。
当我尝试运行项目并连接并从数据库中获取数据时,出现以下错误,提示 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) 我有一个字符串数组,我想要一个包含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 \""}
我想创建此查询:
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#客户端应用程序需要每15分钟检查一次Postgres数据库上的表.问题是我需要将此客户端安装到或多或少200个客户端,因此我需要在查询后关闭数据库连接.
我使用.Close()方法但是,如果我检查Postgres DB上的pg_stat_activity表,我可以看到连接仍处于IDLE状态.我该如何解决这个问题?是否有可能完全关闭连接?
谢谢,安德烈
我想在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的数据源列表中:

如何将自定义数据库提供程序添加到此列表?
UPD:如果我使用命令字符串edmgen.exe我得到错误:
错误7001:无法找到或加载已注册的.Net Framework数据提供程序.
我正在尝试选择一些字段,其中一个字段需要是一个数组,数组的每个元素都包含两个值.每个数组项都需要包含名称(字符变化)和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数据提供程序?)
任何帮助深表感谢.
我正在使用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)
提前致谢.
我正在将 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用以传递主要服务提供者。不幸的是,此时服务提供者还不存在。它即将建成。
我不明白问题是什么以及这个警告想告诉我什么,但没能做到。我怎样才能让那个警告消失?网络还不知道这条消息。
背景:我正在将我的应用程序从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)类似的问题?
npgsql ×10
c# ×7
postgresql ×6
.net-6.0 ×1
.net-core ×1
ado.net ×1
asp.net-core ×1
asp.net-mvc ×1
connection ×1
dapper ×1
database ×1
nuget ×1
sql ×1