如何解决如何在没有 DbContext 的 C# Dotnet Core 应用程序中创建 NpgsqlConnection
我有一个 C# Dotnet Core 控制台应用程序。我正在尝试为 PostgreSQL 数据库(即 crate db)连接 NpgsqlConnection。我使用这个数据库进行时间序列输入。我在服务的构造函数中创建了 NpgsqlConnection。它每次都被调用。这是每次都打开连接的好方法吗?什么是替代方案。在我的项目表中没有在初始时间定义。所以 DbContext 没有用。我认同?。 有时也会出现以下错误。
{Npgsql.NpgsqlOperationInProgressException: 一个命令已经在 进展
我的代码添加在下面。如何以高效的方式使用 NpgsqlConnection 创建连接? 程序.cs
static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json",optional: true,reloadOnChange: true)
.AddEnvironmentVariables();
var configuration = builder.Build();
builder.RegisterType<TimeSeriesService>().As<ITimeSeriesService>();
var npsqlconnectionString = "Host=172.18.0.2;Username=crate;SSL Mode=Prefer;Database=doc";
builder.Register(c => new SensorDataRepository(npsqlconnectionString)).As<ISensorDataRepository>().SingleInstance();
var DataProcessor = container.Resolve<ITimeSeriesService>();
DataProcessor.ConsumeMsgs(brokeraddress,topic,groupid).GetAwaiter().GetResult();
builder.RegisterInstance<IConfigurationRoot>(configuration);
return builder.Build();
}
数据库服务.cs
public class SensorDataRepository : ISensorDataRepository
{
public NpgsqlConnection conn { get; set; }
public SensorDataRepository(string npsqlconnectionString)
{
NpgsqlDatabaseInfo.RegisterFactory(new CrateDbDatabaseInfoFactory());
}
public async Task InsertSensorData(SensorDataViewModel sensordata)
{
string sqlString = "Host=172.18.0.2;Username=crate;SSL Mode=Prefer;Database=doc";
using (NpgsqlConnection sqlCon = new NpgsqlConnection(sqlString))
{
sqlCon.Open();
string cmdString = $"INSERT INTO test1 (sensorid,deviceid,reading,timestamp) VALUES (@s,@d,@r,@t)";
using (NpgsqlCommand sqlCmd = new NpgsqlCommand(cmdString,sqlCon))
{
sqlCmd.Parameters.AddWithValue("s",sensordata.sensorid);
sqlCmd.Parameters.AddWithValue("d",sensordata.deviceid);
sqlCmd.Parameters.AddWithValue("r",sensordata.reading);
sqlCmd.Parameters.AddWithValue("t",sensordata.timestamp);
await sqlCmd.ExecuteNonQueryAsync();
}
}
}
已编辑: 添加了 NpgsqlConnection。 控制台应用程序也只运行一次。并等待下一条消息。这意味着构造函数只调用一次
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。