Alfred
Alfred

Reputation: 21

How do I make a LINQ to SQL database connection fully configurable / generic?

For an ASP.NET C# app, I'd like to use LINQ to SQL to query a SQL database, for which I have defined a connection string in the web.config file. I used the wizard in Visual Studio 2010 to create the LINQ classes. However, upon inspection, the .dbml file explicitly contains the database name and connection string I'm using (in my dev system), and the .designer.cs file also explicitly names the database.

For example, in my .dbml file:

   <?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" />

and in my .designer.cs file:

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

Although the table structures will be static, I don't know what the connection string and database name my customers will choose ahead of time, and I'd like them to only have to change the web.config file in order to configure the database connection.

How do I set this up so that I don't have to compile or release static dev settings into the release build of my product, allowing my customers to configure everything in one place?

Thanks.

Upvotes: 2

Views: 4199

Answers (1)

JPReddy
JPReddy

Reputation: 65553

Check this explanation

You can Initialize your data context with the connection string fetched from your config file. That overrides default connection string used in your designer file.

Another way is creating your own partial DataContext class and adding the OnCreated partial method which gets called in the default constructor. Here is a simply implementation where I am reading the ConnectionString from web.config ConnectionString section.

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

Upvotes: 4

Related Questions