标签: npgsql

使用ExecuteScalar插入时,使用Npgsql检索序列ID

我试图在一个带有串行主键的PostgreSQL表中插入一行,我需要在插入后检索该列.我有这样的事情:

表"pais"有3列:id,pais,capital; id是一个串行列,是它的主键.

NpgsqlCommand query = new NpgsqlCommand("insert into pais(nombre, capital) values(@nombre, @capital)", conn);
query.Parameters.Add(new NpgsqlParameter("nombre", NpgsqlDbType.Varchar));
query.Parameters.Add(new NpgsqlParameter("capital", NpgsqlDbType.Varchar));
query.Prepare();
query.Parameters[0].Value = this.textBox1.Text;
query.Parameters[1].Value = this.textBox2.Text;
Object res = query.ExecuteScalar();
Console.WriteLine(res);
Run Code Online (Sandbox Code Playgroud)

它在表上插入行,但"res"值为null.如果我使用nexval('table_sequence')插入也返回null.

知道怎样才能返回表的id?我错过了什么吗?

提前致谢

.net c# npgsql

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

当Npgsql连接池达到Max时会发生什么

连接字符串参数的名称和这篇博客文章 - http://fxjr.blogspot.co.uk/2010/04/npgsql-connection-pool-explained.html - 让我相信Npgsql不会超过MaxPoolSize值在连接字符串中设置.但是,文档(http://npgsql.projects.postgresql.org/docs/manual/UserManual.html)说"连接池的最大大小.如果池包含的内容超过此值,则将在返回池时处理池化连接连接数.默认值:20"

这表明池实际上可能比MaxPoolSize大,实际上它只是一个级别,Npgsql在返回后立即开始积极地从池中删除连接.

我一直在寻找尝试找到答案但我能确切地知道当你到达MaxPoolSize时会发生什么.其他人都知道吗?

编辑:我应该添加我们正在使用Npgsql 2.0.6.0,因为只有该版本支持另一个依赖项.

c# npgsql

7
推荐指数
1
解决办法
4701
查看次数

将字段与值进行比较并返回bool

我正在尝试将哈希从服务器应用程序移动到PostgreSQL.换句话说,我需要调用PGSQL的查询,它将查询中的字符串与字段中的字符串进行比较,并将相等比较的结果返回为bool,但我不知道如何在没有清除SQL的过程的情况下执行此操作.

upd:我有表用户的字段密码(目前是文本,将来 - bytea).我想写一些像

select * from values ('WrittenPassword' = users.password) where username = 'someuser' ,
Run Code Online (Sandbox Code Playgroud)

必须返回true或false作为平等比较的结果.

sql postgresql npgsql

7
推荐指数
1
解决办法
9365
查看次数

NPGSQL:使用LWGEOMCOLLECTION类型调用的相关操作

我有一个使用Npgsql获取PostGIS数据的查询.它的目的是取一个点(x,y坐标)并计算出那个(如果有的话)几何形状.对于数据库中的绝大多数几何,查询工作正常,但至少有一个我得到以下异常:

错误:XX000:使用LWGEOMCOLLECTION类型调用的相关操作.这是不受支持的.

堆栈顶部的跟踪是:

[NpgsqlException(0x80004005):错误:XX000:使用LWGEOMCOLLECTION类型调用的相关操作.这是不受支持的.]
Npgsql.d__0.MoveNext()+ 3160
Npgsql.ForwardsOnlyDataReader.GetNextResponseObject(布尔清理)+808 Npgsql.ForwardsOnlyDataReader.GetNextRow(布尔clearPending)+308 Npgsql.ForwardsOnlyDataReader.Read()+47

所有几何都应该是有效的,因为我调用ST_MakeValid任何不是,并且当前没有ST_IsValid返回false.几何图形是通过调用创建的,ST_GeomFromKML并且在地图上使用WMS通过GeoServer作为栅格图层渲染,或者作为矢量图层使用,ST_AsGeoJSON因此PostGIS数据似乎没问题.

有什么办法可以修改我的代码或数据来阻止这种情况发生吗?代码失败的部分是读入读取器的部分:

command.CommandText = "SELECT area_code FROM area WHERE ST_INTERSECTS(ST_SetSRID(ST_Point(:x, :y), 4326), shape) AND area_type_code = :typecode";
command.CommandType = CommandType.Text;
var typeCodeParameter = new NpgsqlParameter
{
    DbType = DbType.String,
    ParameterName = "typecode",
    Value = _typeCode
};
var xParameter = new NpgsqlParameter
{
    DbType = DbType.Double,
    ParameterName = "x",
    Value = _x
};
var yParameter = new NpgsqlParameter
{
    DbType = DbType.Double,
    ParameterName = …
Run Code Online (Sandbox Code Playgroud)

c# postgis npgsql

7
推荐指数
1
解决办法
3599
查看次数

如何使用 ForNpgsqlUseXminAsConcurrencyToken 创建的 EF Core 并发令牌

我找到了 npgsql 提供程序扩展来为实体框架核心实体设置并发令牌,它应该执行如下操作:

modelBuilder.Entity<MyEntity>(b =>
{
    b.Property<uint>("xmin")
        .HasColumnType("xid")
        .ValueGeneratedOnAddOrUpdate()
        .IsConcurrencyToken();
});
Run Code Online (Sandbox Code Playgroud)

如果我理解得很好,它会在实体上创建影子属性。

例如,如何使用此属性来跟踪 ASP.NET Core 中的并发更新(更多用户尝试更新同一实体)?我是否应该尝试将 xmin 列映射到普通属性并将其放入隐藏的输入标记,如asp.net core 文档中所示?或者还有别的办法吗?

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

7
推荐指数
1
解决办法
4598
查看次数

无法加载文件或程序集“System.Runtime.CompilerServices.Unsafe”

尝试将 SQLTypeProvider 与 postgres 一起使用时,运行时出现以下错误

dotnet build
Run Code Online (Sandbox Code Playgroud)

错误 FS3033:类型提供程序 'FSharp.Data.Sql.SqlTypeProvider' 报告错误:无法加载文件或程序集 'System.Runtime.CompilerServices.Unsafe, Version=4.0.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'。该系统找不到指定的文件。[/home/sashan/code/titan/src/Server/Server.fsproj]

我的数据提供者是这样的:

type SQL = SqlDataProvider< 
                  ConnectionString = pg_dev_conn_string,
                  DatabaseVendor = Common.DatabaseProviderTypes.POSTGRESQL,
                  UseOptionTypes = true >
Run Code Online (Sandbox Code Playgroud)

如果我将其更改为以下内容

type SQL = SqlDataProvider< 
              ConnectionString = pg_dev_conn_string,
              DatabaseVendor = Common.DatabaseProviderTypes.POSTGRESQL,
              ResolutionPath = "/home/sashan/code/dotnet/2.1.500/sdk/NuGetFallbackFolder/system.runtime.compilerservices.unsafe/4.5.1/lib/netcoreapp2.0",
              UseOptionTypes = true >
Run Code Online (Sandbox Code Playgroud)

错误消失了,但我不明白为什么。修复看起来真的很奇怪。为什么我必须将它指向我的项目之外的文件?System.Runtime.CompilerServices.Unsafe.dll 不应该位于编译器可以找到它的项目子目录之一中的某个位置吗?

c# f# npgsql visual-studio f#-data

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

无法加载文件或程序集“System.Memory,版本 = 4.0.1。” 在 Visual Studio 2015 中

几个月来,我对通过删除并重新创建从数据库生成模型没有任何问题。从 git pull 后,在尝试制作相同的 process 时出现问题。在第二步(使用 DB 的连接字符串创建)之后,第三步不再继续进行,并且在 app.config 文件中没有创建与数据库的连接字符串。我尝试使用数据库凭据测试连接,并且我得到以下信息。

连接测试失败

当我尝试从模型图中更新特定表作为替代方案时,我还得到以下信息:

System.Data.Entity.Core.EntityException:关闭提供程序连接时出错。有关详细信息,请参阅内部异常。---> System.IO.FileNotFoundException: 无法加载文件或程序集“System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51”或其依赖项之一。

我重新安装了实体框架和 npgsql 包,并尝试添加所有(相同的)程序集,但没有成功。Stack 上的类似答案并没有解决我的问题。(我可以使用当前版本,而无需在 VS 或其任何软件包上进行进一步更新。)

注意:当我使用 API 调用与当前模型(与 DB 正确通信)时,我从我的服务中获取了所有适当的数据,但我无法从 DB 生成新模型。

任何解决方案?

我在用

  • 视窗 10

  • VS 2015

  • 实体框架 6.2.0

  • Npgsql 3.1.1

  • .Net v.4.6.2

  • Asp.net

    提前致谢 !

.net c# npgsql entity-framework-6 visual-studio-2015

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

在连接到 Postgres 方面,Node 比 .NET Core 快 20 倍

我有两台服务器连接到PostgresSQL 9.6Azure 上托管的数据库。服务器正在做一件事 -SELECT 1每 5 秒通过查询访问Postgres 数据库。

连接到数据库并获取数据的典型时间:

  • 节点: 25 MS
  • .NET Core 3.1 使用 Npsql 4.1.1(我也尝试过 4.1.2,没有差异): 500 MS

我的问题是我的 .NET Core 应用程序在获取数据方面比 Node慢 20 倍。我相信.NET Core 由于某种原因没有汇集连接。这种缓慢发生在本地运行应用程序和在 Azure 应用程序服务上运行它时 - 没有区别。我想解决 .NET --> Postgres 缓慢的问题。

请只浏览相关细节,不要在这一点上阅读整个内容 - 我相信只有.NET Core代码是相关的。

APsPing到我的机器上的数据库(应用程序Node.NET Core应用程序都在其上运行:

Connecting to foobarPostGres:5432 (warmup): from someIp: 19.98ms
Connecting to foobarPostGres:5432: from someIp: 1.65ms
Connecting to foobarPostGres:5432 from …
Run Code Online (Sandbox Code Playgroud)

c# postgresql azure npgsql azure-postgresql

7
推荐指数
1
解决办法
1232
查看次数

如何将类实例转换为 JsonDocument?

假设我们有一个如下所示的实体类:

public class SerializedEntity
{
    public JsonDocument Payload { get; set; }

    public SerializedEntity(JsonDocument payload)
    {
        Payload = payload;
    }
}
Run Code Online (Sandbox Code Playgroud)

根据npsql这会生成一个表,该表payload的类型jsonb为此类,这是正确的。

现在我想做的是获取任何类实例并将其存储payload在此表中,例如:

public class Pizza {
    public string Name { get; set; }
    public int Size { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后应该可以作为具有以下结构的对象进行检索:

{Name: "name", Size: 10}
Run Code Online (Sandbox Code Playgroud)

所以我需要这样的东西:

var pizza = new Pizza("Margharita", 10);
var se = new SerializedEntity(someConverter.method(pizza))
Run Code Online (Sandbox Code Playgroud)

c# entity-framework npgsql asp.net-core

7
推荐指数
2
解决办法
3235
查看次数

更新后无法使用 EF Core 中的空间数据按距离(米)进行过滤

我有一个包含几何列的表,使用EF Core 空间数据Npgsql.EntityFrameworkCore.PostgreSQL 提供程序

class City
{
    public int ID { get; set; }

    public string CityName { get; set; }

    public Point Location { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我曾经这样按距离过滤

Point myLocation = new Point(longitude, latitude)
{
    SRID = 4326
};
cities = db.Cities.Where(a => a.Location.ProjectTo(2855).Distance(myLocation.ProjectTo(2855)) <= radiusMeters);
Run Code Online (Sandbox Code Playgroud)

更新后我收到以下错误:

无法翻译 LINQ 表达式“DbSet()...”。其他信息:方法“App.GeometryExtensions.ProjectTo”的翻译失败。

它无需使用即可工作ProjectTo(),但按度数计数。有没有办法再次将此查询翻译为与仪表一起使用?

c# postgis npgsql nettopologysuite entity-framework-core

7
推荐指数
0
解决办法
667
查看次数