Entity Framework и ASP.NET MVC 2: выбор экземпляра базы данных на лету - PullRequest
1 голос
/ 09 ноября 2010

В настоящее время я работаю над проектом ASP.NET MVC 2, в котором требуется несколько экземпляров одной и той же базы данных SQL Server 2008 R2 (один в производстве, использующий репликацию SQL, другие - его аналог разработки, позволяющий обновлять схемы и тестировать приложения локально до выпуска продукта, один экземпляр с включенной репликацией SQL, другой без него).

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

Не знаю, насколько это хорошо, но способ изменения экземпляра БД следующий:

  1. Зайдите в web.config, удалите строку подключения активной БД
  2. Удалить текущий Database.edmx
  3. Создать новый EDMX для указания на другую базу данных
  4. Откройте новый файл Database.edmx с помощью редактора XML и замените его:
    <Property Name="rowguid" Type="uniqueidentifier" Nullable="false" />
    с этим : <Property Name="rowguid" Type="uniqueidentifier" Nullable="false" StoreGeneratedPattern="Computed"/>
  5. Сборка проекта развертывания
  6. Установите установку либо на наш производственный сервер, либо на наш тестовый сервер

Есть ли способ сделать это быстрее и удобнее? В проекте или в возможностях развертывания решения?

Ответы [ 2 ]

3 голосов
/ 09 ноября 2010

Да, есть лучшее решение, а именно: EntityConnectionStringBuilder .

Вы имеете полный контроль над всеми аспектами соединения, включаяпровайдер, сервер / база данных, CSDL / SSDL / MSL, безопасность и т. д.

Затем можно динамически назначать требуемую переключаемую информацию.

0 голосов
/ 09 ноября 2010

Это частичное решение ... вы можете переопределить строку подключения в методе OnContextCreated.Таким образом, вы могли бы сделать что-то вроде этого:

Private Sub OnContextCreated()
            Dim fi As FieldInfo = GetType(ObjectContext).GetField("_connection", BindingFlags.Instance Or BindingFlags.NonPublic)
            Dim Environment As String = "" 'pull from web.config

            'Change the connection string based on which environment you are looking at
            If Environment = "dev" Then
                fi.SetValue(Me, New EntityConnection("dev connection string"))
            ElseIf Environment = "prod" Then
                fi.SetValue(Me, New EntityConnection("prod connection string"))
            End If

        End Sub

Таким образом, вам не нужно будет каждый раз удалять и заново создавать файл .edmx, поскольку строка подключения будет указывать на правильную базу данных - единственноевам нужно будет отредактировать значение rowguid, так как оно различно для двух баз данных.

Еще одна вещь, которую следует учитывать ... вы можете сопоставить структуру сущностей create / update / delete с пользовательскими хранимыми процедурами.Поэтому, если у вас есть только один или два столбца, которые различаются между серверами, вы можете иметь на каждом сервере настраиваемые хранимые процедуры, которые имеют дело с различиями столбцов между ними.

...