如何在没有 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...