Pagine

mercoledì 21 aprile 2010

Creare una connection string per EntityFramework a partire da una ConnectionString generica
(Scusate se il codice non è molto leggibile, ma lo spazio è quello che è)

using System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Data.SqlClient;
using
System.Data.EntityClient;
using
System.Configuration;
using
System.Data.Objects;
using
System.IO;

namespace NameSpace.Commons
{
public class EntityConnStringBuilder
{
public static string GetNewAgeConnectionString(string dataModelName)
{
var esc = new EntitySqlConnectionStringBuilder(dataModelName, "ConnString");
return esc.GenerateConnectionString();
}
}

public sealed class EntitySqlConnectionStringBuilder
{
public string DataModelName { get; private set; }
public string ConnStringTagName { get; private set; }

public EntitySqlConnectionStringBuilder(string dataModelName, string connStringTagName)
{
DataModelName = dataModelName;
ConnStringTagName = connStringTagName;
}

public string GenerateConnectionString()
{
var connectString = GetSqlConnectionStringFromConfig();
var sqlBuilder = new SqlConnectionStringBuilder(connectString.ConnectionString);
string providerString = sqlBuilder.ToString();
var entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.Provider = connectString.ProviderName;
entityBuilder.ProviderConnectionString = providerString;
entityBuilder.Metadata = GetMetadata();
return entityBuilder.ConnectionString;
}

private string GetMetadata()
{
var sb = new StringBuilder();
sb.Append(@"res://*/");
sb.Append(DataModelName);
sb.Append(@".csdl|");
sb.Append(@"res://*/");
sb.Append(DataModelName);
sb.Append(@".ssdl|");
sb.Append(@"res://*/");
sb.Append(DataModelName);
sb.Append(@".msl");
return sb.ToString();
}

private ConnectionStringSettings GetSqlConnectionStringFromConfig()
{
var conn = ConfigurationManager.ConnectionStrings[ConnStringTagName];
if (conn == null)
{
var strConn = ConfigurationManager.AppSettings[ConnStringTagName];
if (string.IsNullOrEmpty(strConn))
throw new ArgumentException("Nessuna Tag trovato tra le ConnectionString or AppSettings del file di configurazione per il connStringTagName in input :" + ConnStringTagName);
conn = new ConnectionStringSettings();
conn.ConnectionString = strConn;
conn.ProviderName = "System.Data.SqlClient";
}
return conn;
}
}
}

Nessun commento:

Posta un commento