我正在开发一个NET 8应用程序,使用EF连接到Postgres/PostGis数据库。我有一个实体,它有一个Geometry?数据类型(这是Polygon和Point的基础),我将在其中存储任何一个派生类型。我们有一个事件驱动域,所以我实际上写了一个投影来将现有的事件持久化到数据库中,所有这些都很好。我可以毫无问题地存储多边形和点。
我现在正在为应用程序级逻辑编写测试。我使用Testcontainers.Postgres运行postgis/postgis:latest image,并安装了postgis和hstore扩展。测试使用与投影相同的DbContext。然而,当我的测试尝试创建新记录时,在将更改保存到db时出现异常。在将Polygon类型存储在Geometry?属性中的情况下,异常为
System.InvalidCastException : Writing values of 'NetTopologySuite.Geometries.Polygon' is not supported for parameters having NpgsqlDbType 'Geometry'.
字符串
当我尝试使用空的Geometry?值存储新记录时,仍然会出现以下异常:
System.InvalidCastException : Writing is not supported for parameters having NpgsqlDbType 'Geometry'.
型
所以我知道数据库设置正确,DbContext/EF配置正确,因为投影没有问题。我使用的Testcontainer Postgres示例中最大的未知数。但它运行的图像与我运行投影的图像相同。我现在不知道该检查什么。有什么想法吗?
1条答案
按热度按时间neskvpey1#
显然,NpqSql 7中连接/类型注册的工作方式发生了变化。因此,如果您运行7或8,可能会发生这种情况。建议使用他们的新NpgsqlDataSourceBuilder。这为我解决了这个问题:
字符串