Можно ли сохранить изменения EF на другом сервере SQL (строка подключения)? - PullRequest
0 голосов
/ 15 февраля 2011

У нас есть приложение ASP.NET, которое будет использовать несколько серверов SQL с одноранговой репликацией транзакций.Поскольку приложение не выполняет много операций вставки / обновления (возможно, 5% всех запросов), мы решили, что для вставки / обновления / удаления следует использовать только один SQL-сервер, чтобы избежать большинства конфликтов.Все SQL-серверы будут использоваться для выбора для повышения производительности.

Возможно ли с EF4 убедиться, что изменения сохраняются только на первом SQL-сервере?Переопределение SaveChanges (..) и переключение строки подключения перед сохранением является идеей, но я не уверен, возможно ли это и понравится ли это EF4.

Если это невозможно, то каковы лучшие практикипри использовании EF4 с несколькими серверами SQL и одноранговой репликацией?

1 Ответ

0 голосов
/ 18 февраля 2011

Лучшее и, пожалуй, единственное надежное место для установки строки подключения - переопределение созданного oncontext.

Похоже, вы можете использовать частичный класс.Вот пример кода VB, который может помочь, я напишу его на C #, если это поможет

Это частичный класс с именем, совпадающим с вашим контекстом

Partial Public Class YourCtxContainer
Private Sub OnContextCreated()
    ' Register the handler for the SavingChanges event. 
    AddHandler Me.SavingChanges, AddressOf context_SavingChanges
End Sub

' SavingChanges event handler. 
Private Shared Sub context_SavingChanges(ByVal sender As Object, ByVal e As EventArgs)
    ' Validate the state of each entity in the context before SaveChanges can succeed. 
    For Each entry As ObjectStateEntry In DirectCast(sender, ObjectContext).ObjectStateManager.GetObjectStateEntries(EntityState.Added)
        If Not entry.IsRelationship Then
            'Here check if the context connectionstring is what you want and if not.
            'Create a new context for your inserts and updates and pass your entity over                
            'Then mark it handled so the current context dismisses it.

        End If
    Next
End Sub

Конечный класс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...