如何使LINQ to SQL数据库连接完全可配置/通用?

时间:2011-02-10 01:03:19

标签: visual-studio-2010 linq-to-sql configuration connection-string datacontext

对于ASP.NET C#应用程序,我想使用LINQ to SQL来查询SQL数据库,我已经在web.config文件中定义了一个连接字符串。我在Visual Studio 2010中使用向导来创建LINQ类。但是,经过检查,.dbml文件显式包含我正在使用的数据库名称和连接字符串(在我的开发系统中),而.designer.cs文件也明确地命名数据库。

例如,在我的.dbml文件中:

   <?xml version="1.0" encoding="utf-8"?>
<Database Name="MyDatabaseName" Class="MyLinqDataContext"
xmlns="http://schemas.microsoft.com/linqtosql/dbml/2007">
<Connection Mode="WebSettings" ConnectionString="XXX"
SettingsObjectName="System.Configuration.ConfigurationManager.ConnectionStrings"
SettingsPropertyName="MyConnectionString" Provider="System.Data.SqlClient" />

并在我的.designer.cs文件中:

[global::System.Data.Linq.Mapping.DatabaseAttribute(Name="MyDatabaseName")]

虽然表结构是静态的,但我不知道客户会提前选择什么连接字符串和数据库名称,我希望他们只需更改web.config文件即可配置数据库连接。

如何设置它以便我不必将静态开发设置编译或发布到我的产品的发布版本中,从而允许我的客户在一个地方配置所有内容?

感谢。

1 个答案:

答案 0 :(得分:4)

选中此explanation

您可以使用从配置文件中获取的连接字符串初始化数据上下文。这会覆盖设计器文件中使用的默认连接字符串。

另一种方法是创建自己的部分DataContext类,并添加在默认构造函数中调用的OnCreated部分方法。这是一个简单的实现,我从web.config ConnectionString部分读取ConnectionString。

  Partial class MyDataContext
    {
        partial void OnCreated()
        {
            this.Connection.ConnectionString = 
             ConfigurationManager.ConnectionStrings["myconnection"].ConnectionString;
        }
    }