Единственная строка подключения с несколькими моделями платформы объекта?

На работе у нас в настоящее время есть очень большое веб-приложение с соединением с крупной базой данных. Мы использовали Платформу Объекта некоторое время теперь и сделать вещи легче, мы разделили базу данных на многие модели Entity. Это работает хорошо на нас, но мы столкнулись с проблемой. Для каждой модели EF нужна ее собственная строка подключения из-за части метаданных строки подключения. Управление так многими строка подключения является болью.

Теперь у меня есть решение, что я думаю, будет работать. Я собираюсь создать класс, которому сохранят информацию о метаданных как свойство, также связанное к стандартной строке подключения в web.config. Таким образом, когда мы используем строку подключения "База данных. EntityConnectionString" это даст мне Строку подключения Объекта, но мы только должны управлять единственной строкой подключения в web.config. Мы должны будем все еще управлять классом с метаданными, но Модели не изменяются очень, и мы часто не создаем их, таким образом, обслуживание должно быть прекрасным. Мой вопрос, существует ли лучший способ заниматься этой проблемой или как Вы сделали бы это?

Спасибо!

9
задан Lukasz 25 June 2010 в 13:22
поделиться

1 ответ

Вот как я реализовал свое решение этой проблемы:

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");
            }
        }
    }
}

Мне все еще нужно почистить код и все остальное, но я думаю, что это дает вам хорошее представление о том, как это может быть реализовано. Мне было бы очень интересно узнать, есть ли другие и лучшие способы сделать это.

Спасибо!

7
ответ дан 4 December 2019 в 22:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: