【问题标题】:linq2db insert or query is returning error: Connection option 'datasource' is duplicatedlinq2db 插入或查询返回错误:连接选项“数据源”重复
【发布时间】:2020-02-06 13:33:00
【问题描述】:

我有一个简单的表,我可以使用 MySQL 命令执行插入和读取操作。 由于某种原因,使用 Linq2DB 时出现以下错误:

连接选项“数据源”重复。 在 MySql.Data.MySqlClient.MySqlBaseConnectionStringBuilder.AnalyzeConnectionString

这行得通:

       private void BulkInsert(List<string> rows)
        {
            var commandText = new StringBuilder("INSERT INTO cloudevents (JobId, Name, ErrorUrgency, EventCategory, EventType, Time, Parameters) VALUES ");
            commandText.Append(string.Join(",", rows));
            commandText.Append(";");

            try
            {
                using (MySqlCommand command = MySqlConnectionConnector.CreateCommand())
                {
                    command.CommandText = commandText.ToString();
                    command.CommandType = CommandType.Text;
                    command.ExecuteNonQuery();
                }
            }
            catch (Exception e)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(e);
                throw;
            }
            finally
            {
                rows.Clear();
            }
        }

这个抛出错误:

           using (var db = new EocIpcDB())
            {
                db.Insert(new EventsOnCloudData()
                {
                    JobId = 2000,
                    ErrorUrgency = "Error",
                    EventCategory = "HW",
                    EventType = "Disk",
                    Name = "Haedware Events",
                    Time = DateTime.Now,
                    Parameters = "Lots of Parameters"
                });

                var query = from p in db.EventsOnCloudData select p;
                return query.ToList();
            }

我的数据表:

    [Table("cloudevents")]
    public class EventsOnCloudData
    {
        [PrimaryKey, Identity]
        public int Key { get; set; } // primary key / uid

        [Column(Name = "Name"), NotNull]
        public string Name { get; set; }

        [Column(Name = "ErrorUrgency"), NotNull]
        public string ErrorUrgency { get; set; }

        [Column(Name = "EventCategory"), NotNull]
        public string EventCategory { get; set; }

        [Column(Name = "EventType"), NotNull]
        public string EventType { get; set; }

        [Column(Name = "JobId"), NotNull]
        public int JobId { get; set; }

        [Column(Name = "Time"), NotNull]
        public DateTime Time { get; set; } //UTC 

        [Column(Name = "Parameters"), NotNull]
        public string Parameters { get; set; } //JSON Parameters
    }

LinqtoDB 数据连接类:


    public class EocIpcDB : LinqToDB.Data.DataConnection
    {
        public EocIpcDB() : base("eocipcdb") { }

        public ITable<EventsOnCloudData> EventsOnCloudData => GetTable<EventsOnCloudData>();
    }

Linq 2 DB 设置类:

public class EventsOnCloudSettings : ILinqToDBSettings
    {
        public IEnumerable<IDataProviderSettings> DataProviders => Enumerable.Empty<IDataProviderSettings>();

        public string DefaultConfiguration => "SqlServer";
        public string DefaultDataProvider => "SqlServer";

        public IEnumerable<IConnectionStringSettings> ConnectionStrings
        {
            get
            {
                yield return
                    new ConnectionStringSettings
                    {
                        Name = "eocipcdb",
                        ProviderName = ProviderName.MySql,
                        ConnectionString = @"Server=.\;datasource=localhost;port=3306;database=eocipcdb;username=root;password=HPdfeHPdfe#1;"
                    };
            }
        }
    }

    internal class ConnectionStringSettings : IConnectionStringSettings
    {
        public string Name { get; set; }
        public string ProviderName { get; set; }
        public string ConnectionString { get; set; }

        public bool IsGlobal => false;
    }

【问题讨论】:

    标签: mysql linq2db


    【解决方案1】:

    此错误由 MySql.Data 提供程序本身生成,因为您设置了两次服务器选项:Server=.\;datasource=localhost;。服务器和数据源是同义词,与hostdata sourceaddressaddrnetwork address 并列。

    【讨论】:

    • 感谢分配。我从连接字符串中删除了服务器并且它起作用了。如果你能解释为什么会发生这种情况,我将不胜感激。
    • 不确定我理解你所说的this 是什么意思。您两次指定了相同的连接属性,并且 Oracle 的 MySql.Data 提供程序包含验证逻辑以防止它:github.com/mysql/mysql-connector-net/blob/8.0/MySQL.Data/src/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    相关资源
    最近更新 更多