postgresql 使用C# gRPC Web应用程序连接postgres数据库

ejk8hzay  于 2023-06-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(182)

对于一个学校项目,我正在使用ASP.NETWebApplication框架和gRPC来制作某种API。这方面的细节并不太重要。我还将此API连接到Postgres数据库。我正在使用Npgsql库。
也许在这个项目中使用Entity Framework Core库会更好,但是现在有点晚了,所以也许将来会。而且,我现在所做的也是有效的。
根据Npgsql的文档,我需要创建一个数据源。当我需要查询某些东西时,我可以使用这个示例打开一个连接,最后我也需要关闭它。在program.cs文件中执行此操作最有意义,因为该文件包含Web服务器的所有配置,以及我所包含的不同gRPC服务。
当我用RESTfull API编写一个不同的程序时,我就像下面的代码一样。在HTTP请求函数中,我可以直接调用数据库连接。

\\ configurations
...
\\
var app = builder.Build() // Build the web application

var connectionString = "Host=myserver;Username=mylogin;Password=mypass;Database=mydatabase";
await using var dataSource = NpgsqlDataSource.Create(connectionString);

\\ HTTP request pipelines configurations

app.MapGrpcService<Servicer>();
...

app.Run();

但是,我在这个项目中使用的是gRPC,而实际处理gRPC请求的代码并不在program.cs文件中。这意味着我不能使用我创建的数据源。
我可以在每个服务文件中创建一个数据源或连接,但这似乎不是正确的方法,因为每次都必须编写一些重复的代码。这似乎也是一个真正的资源沉重的行动。
最后,我使用了program.cs文件中的一个分部类,并在其中创建了datasource。代码如下。这个我可以在项目的不同类中调用。

public partial class Program
{
        public static readonly NpgsqlDataSource dataSource = NpgsqlDataSource.Create(
        "User ID =id;Password=pw;Server=example.com;Port=5432;Database=db;Integrated Security=true;Pooling=true;");    
}

基本上,这是有效的,但我想知道这是否也是“正确”的方式来做到这一点。或者有更好的办法吗?

8nuwlpux

8nuwlpux1#

您需要使用DI容器,特别是当您有一个ASP.NET项目时。对于npgsql,您可以使用提供者注册nuget(有关详细信息,请参阅nuget自述文件)。
在DI容器中注册提供程序后,只需将其注入到gRPC服务的构造函数中。

相关问题