Добавление модели данных сущности ADO.Net с использованием строки подключения machine.config

Я нахожусь на начальном уровне изучения MVC5 с использованием EF6. В основном я пытаюсь использовать строку подключения, определенную в machine.config, а не использовать web.config при создании модели данных сущности ADO.NET. Причина, по которой я использую machine.config для строки подключения: у нас есть разные серверы SQL Cluster и серверы приложений. На локальном компьютере мы используем локальный экземпляр SQL Server, но на сервере beta / Live SQL мы используем разные имена экземпляров. Учетные данные тоже разные. поэтому для каждого приложения / веб-сервера мы определили ConnectionString в machine.config для того же имени базы данных, но с разными учетными данными.

Есть ли способ использовать ConnectionString, указанный в machine.config, при использовании мастера для создания модели данных сущности ADO.Net, или я могу дать ссылку на machine.config ConnectionString моему приложению web.config, или есть какой-либо другой способ решить эту проблему проблема?

Я использую технику Database First с использованием MVC5. Я пробовал следующее после создания edmx с использованием локальной БД, а затем попытался изменить строку подключения в моем классе контекста:

public partial class MasterDataEntities : DbContext
{
    public MasterDataEntities()
        : base(string.Format("{0}", getConnectionString()))
    {
    }

    public static string getConnectionString()
    {
        Configuration config = ConfigurationManager.OpenMachineConfiguration();
        return config.ConnectionStrings.ConnectionStrings["masterdata"].ConnectionString;
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }
}

Ошибка: OnModelCreating Дополнительная информация: код, сгенерированный с использованием шаблонов T4 для разработки «Сначала база данных» и «Сначала модель», может работать некорректно при использовании в режиме «Сначала код». Чтобы продолжить использование Database First или Model First, убедитесь, что строка подключения Entity Framework указана в файле конфигурации исполняемого приложения. Чтобы использовать эти классы, которые были созданы из Database First или Model First, с Code First добавьте любую дополнительную конфигурацию с помощью атрибутов или DbModelBuilder API, а затем удалите код, который вызывает это исключение.

С уважением


person Learner    schedule 18.06.2014    source источник


Ответы (2)


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

Прочтите эту статью о файлах конфигурации

string innerConnectionString = ConfigurationManager.ConnectionStrings["Inner"].ConnectionString;

<add name="Inner" connectionString="Data Source=SomeServer;Initial Catalog=SomeCatalog;Persist Security Info=True;User ID=Entity;Password=SomePassword;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
person sarin    schedule 18.06.2014

После нескольких экспериментов с подходом MVC и EF Database First я обнаружил, что проблема была в строке подключения machine.config. Entity Framework не нравится стандартная строка подключения. Строка подключения должна содержать сведения о метаданных о ресурсах DBContext и имя поставщика для EF. Моя стандартная строка ConnectionString в файле machine.config была:

<add name="masterDataConnectoinString" connectionString="Data Source=Instance1;Initial Catalog=masterData;Integrated Security=True;"/>

Затем я скопировал ConnectionString из web.config в maching.config, который был создан по умолчанию, когда я добавил модель данных сущности (edmx):

<add name="masterDataConnectionString" connectionString="metadata=res://*/Models.DBContext.csdl|res://*/Models.DBContext.ssdl|res://*/Models.DBContext.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=Instance1;initial catalog=masterData;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

А затем указание имени строки подключения, которое будет использоваться, как я показал в моем вопросе для MasterDataEntities, решает проблему.

Использование ConnectionString machine.config создает еще одну проблему. Если вы вносите изменения в базу данных, например, добавляете еще один столбец в любую таблицу и хотите обновить модель данных сущности (edmx) с новым изменением, щелкните правой кнопкой мыши диаграмму edmx, а затем выберите «Обновить модель из базы данных», что не сработает. Мастер попросит указать новое соединение, что неверно. Он должен предложить вам добавить / обновить / удалить таблицы, представления или процедуры.

Чтобы временно решить эту проблему, я оставил connectionString в своем web.config, но закомментировал. Если бы мне пришлось обновить модель из базы данных, раскомментируйте строку соединения web.config и верните свои (в моем случае) MasterDataEntities на использование web.config:

public partial class MasterDataEntities : DbContext
{
    public MasterDataEntities()
       : base("name=masterDataConnectionString"))
    {
    }
}

Что обновляет модель. Если у кого-то есть лучшее решение, пожалуйста, дайте мне знать. Спасибо

person Learner    schedule 19.06.2014