linq2db 异常:“未提供配置字符串”。我没有 web/app.config,但即使我明确给出字符串,同样的异常

Posted

技术标签:

【中文标题】linq2db 异常:“未提供配置字符串”。我没有 web/app.config,但即使我明确给出字符串,同样的异常【英文标题】:linq2db exception: "Configuration string is not provided". I don't have a web/app.config, but even if I give the string explicitly, same exception 【发布时间】:2021-12-25 11:27:34 【问题描述】:

我正在开展一个培训项目,为 Northwind 开发一个带有实体框架的 DAL,并在同一个项目中开发另一个带有 linq2db 的 DAL。

我在运行使用 linq2db 的测试时不断收到错误消息:

LinqToDB.LinqToDBException : 未提供配置字符串。

我猜是因为我没有按照模板“CopyMe.SqlServer.tt.txt”的第 3 步操作,该模板说要将其添加到 web/app.config.file:

<connectionStrings>
    <add name="Northwind" providerName="System.Data.SqlClient"
        connectionString="Data Source=(local);Initial Catalog=Northwind;Integrated Security=true" />
</connectionStrings>

因为我的项目中没有这样的文件。

当我尝试像这样传递配置时,它也不起作用,同样的异常:

using var db = new NorthwindDB(Resources.ConnectionString);
var q = db.Customers.Select(c => c);

foreach (var c in q)
    Console.WriteLine(c.ContactName);

我该怎么办?我错过了什么?

upd:很抱歉提供错误信息。当我显式传递配置时,异常是:

Configuration '数据源=(local);初始 Catalog=Northwind;Integrated Security=true' 未定义。

【问题讨论】:

您的项目中是否有app.config 文件?除了 .config 文件中的connectionStrings,还有several options to provide connection information。 @AlwaysLearning 谢谢!使用连接字符串设置提供程序有效 【参考方案1】:

感谢@AlwaysLearning。

linq2db github 中的这种方法是我的解决方案: https://github.com/linq2db/linq2db#using-connection-string-settings-provider

public class ConnectionStringSettings : IConnectionStringSettings

    public string ConnectionString  get; set; 
    public string Name              get; set; 
    public string ProviderName      get; set; 
    public bool   IsGlobal         => false;


public class MySettings : 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             = "Northwind",
                    ProviderName     = ProviderName.SqlServer,
                    ConnectionString =
                        @"Server=.\;Database=Northwind;Trusted_Connection=True;Enlist=False;"
                ;
        
    

然后把它放在应用开始的地方:

DataConnection.DefaultSettings = new MySettings();

【讨论】:

以上是关于linq2db 异常:“未提供配置字符串”。我没有 web/app.config,但即使我明确给出字符串,同样的异常的主要内容,如果未能解决你的问题,请参考以下文章

在 Linq2DB 中缓存

Linq2DB 无法翻译 Where 子句中的映射列

Linq2DB之研究和探索

linq2db Sqlite Insert之后获取插入的自增量ID值

LINQ 2 DB 动态插入表

为啥我的异常没有被提出?