На работе у нас в настоящее время есть очень большое веб-приложение с соединением с крупной базой данных. Мы использовали Платформу Объекта некоторое время теперь и сделать вещи легче, мы разделили базу данных на многие модели Entity. Это работает хорошо на нас, но мы столкнулись с проблемой. Для каждой модели EF нужна ее собственная строка подключения из-за части метаданных строки подключения. Управление так многими строка подключения является болью.
Теперь у меня есть решение, что я думаю, будет работать. Я собираюсь создать класс, которому сохранят информацию о метаданных как свойство, также связанное к стандартной строке подключения в web.config. Таким образом, когда мы используем строку подключения "База данных. EntityConnectionString" это даст мне Строку подключения Объекта, но мы только должны управлять единственной строкой подключения в web.config. Мы должны будем все еще управлять классом с метаданными, но Модели не изменяются очень, и мы часто не создаем их, таким образом, обслуживание должно быть прекрасным. Мой вопрос, существует ли лучший способ заниматься этой проблемой или как Вы сделали бы это?
Спасибо!
Вот как я реализовал свое решение этой проблемы:
namespace DBLibrary
{
public enum Models
{
Model1,
Model2
}
public static class Database
{
public static string EntitiesConnectionString(Models model)
{
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["Default"].ConnectionString);
builder["MultipleActiveResultSets"] = true;
builder["Connect Timeout"] = 30;
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.Provider = "System.Data.SqlClient";
entityBuilder.ProviderConnectionString = builder.ConnectionString;
switch (model)
{
case Models.Model1:
entityBuilder.Metadata = "res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl";
return entityBuilder.ToString();
case Models.Model2:
entityBuilder.Metadata = "res://*/Model2.csdl|res://*/Model2.ssdl|res://*/Model2.msl";
return entityBuilder.ToString();
default:
throw new Exception("Invalid model, no connection string defined");
}
}
}
}
Мне все еще нужно почистить код и все остальное, но я думаю, что это дает вам хорошее представление о том, как это может быть реализовано. Мне было бы очень интересно узнать, есть ли другие и лучшие способы сделать это.
Спасибо!