(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;
}
}
}