linq2db抛出配置未提供异常,无config文件传连接字符串仍报错如何解决?
你出现的Configuration xxx is not defined报错,是因为你调用的NorthwindDB单参数构造函数默认接收的是配置项名称,而非原始连接字符串,linq2db会拿着你传入的完整连接字符串去配置文件里找同名的配置项,找不到就抛出该异常。
解决方案
方法1:直接使用多参数构造重载
调用NorthwindDB的双参数构造函数,同时传入数据库提供器名称和连接字符串即可,不需要依赖配置文件:
// 第二个参数根据你使用的SqlServer驱动类型调整,用System.Data.SqlClient就填对应名称,用Microsoft.Data.SqlClient就替换为对应值 using var db = new NorthwindDB( providerName: "System.Data.SqlClient", connectionString: Resources.ConnectionString); var q = db.Customers.Select(c => c); foreach (var c in q) Console.WriteLine(c.ContactName);
方法2:全局预注册连接配置
在程序启动的入口位置(测试项目的初始化方法、控制台项目的Main方法、Web项目的启动配置逻辑)全局注册linq2db的连接配置,后续构造NorthwindDB实例时不需要重复传参:
using LinqToDB; using LinqToDB.Data; // 全局仅需执行一次 DataConnection.DefaultSettings = new LinqToDB.Configuration.LinqToDBConnectionSettings() .AddConnection( configurationName: "Northwind", providerName: "System.Data.SqlClient", connectionString: Resources.ConnectionString);
配置完成后直接用无参构造即可:
using var db = new NorthwindDB();
方法3:添加配置文件适配TT模板原生逻辑
如果要完全匹配CopyMe.SqlServer.tt.txt模板的默认设计,直接给项目添加配置文件即可:
- .NET Framework项目:在项目根目录添加
App.config(类库/桌面项目)或Web.config(Web项目),填入你提到的connectionStrings节点,同时将文件属性中的「复制到输出目录」设置为「如果较新则复制」 - .NET Core/.NET 5+项目:同样可以添加
App.config适配TT模板的默认读取逻辑,无需额外修改生成的NorthwindDB代码
额外注意事项
EF和linq2db的配置读取逻辑完全独立,共用同一个连接字符串也不会出现冲突,不需要修改你已经写好的EF相关配置。
内容的提问来源于stack exchange,提问作者Pavel Antropov
相关产品推荐
相关产品推荐

