Как иметь уникальные строки подключения структуры объекта в каждом файле конфигурации пользователя - PullRequest
0 голосов
/ 30 ноября 2010

У меня есть ситуация, когда некоторые клиенты видят сервер по его локальному IP, а некоторые по глобальному.Так что для некоторых из них IP равен 10.0.0.4, а для некоторых 94.44.224.132.Я использую ClickOnce для развертывания и Entity Framework для генерации отображения БД.Теперь у меня есть настройки строки подключения в моем разделе настроек пользователя, и для каждого пользователя я сохраняю свою собственную.После этого для построения контекста сущности я делаю следующее:

SomeEntities context = new SomeEntities(new EntityConnection("metadata=res://*/DBModel.csdl|res://*/DBModel.ssdl|res://*/DBModel.msl;provider=System.Data.SqlClient;provider connection string=\"" + Properties.Settings.Default.ServerLocalConnectionString + "\""));

Но есть некоторые проблемы с открытием / закрытием и выполнением команд после такого подхода.Есть ли какой-то правильный способ хранить отдельные строки подключения для каждого клиента и не перезаписывать их при развертывании (предпочтительно ClickOnce)?

1 Ответ

0 голосов
/ 01 декабря 2010

Найден ответ здесь .

    EntityConnectionStringBuilder ecb = new EntityConnectionStringBuilder();
    if (serverName=="Local")
    {
        ecb.ProviderConnectionString = Properties.Settings.Default.ServerLocalConnectionString;
    }
    else
    {
        ecb.ProviderConnectionString = Properties.Settings.Default.ServerConnectionString;
    }

    ecb.Metadata = "res://*/";
    ecb.Provider = "System.Data.SqlClient";
    SomeEntities context = new SomeEntities(new EntityConnection(ecb.ToString());

Кажется, это работает. И теперь я могу развернуть приложение и оставить пользователю решение, к какому серверу он хочет подключиться, и оставить эту конфигурацию после обновлений, поскольку она записана в app.config пользователя.

...