是否可以将EF更改保存到其他SQL server(连接字符串)?

是否可以将EF更改保存到其他SQL server(连接字符串)?,sql,entity-framework-4,replication,Sql,Entity Framework 4,Replication,我们有一个ASP.NET应用程序,它将使用多个SQL Server进行对等事务复制。由于应用程序不进行大量的插入/更新(可能占所有查询的5%),我们认为只有一台SQL server可以用于插入/更新/删除,以避免大多数冲突问题。所有SQL Server都将用于选择,以提高性能 EF4是否可以确保更改只存储在第一个SQL server上?在保存之前覆盖SaveChanges(..)并切换连接字符串是一个好主意,但我不确定这是否可行,以及EF4是否会喜欢它 如果不可能,那么将EF4与多个SQL Se

我们有一个ASP.NET应用程序,它将使用多个SQL Server进行对等事务复制。由于应用程序不进行大量的插入/更新(可能占所有查询的5%),我们认为只有一台SQL server可以用于插入/更新/删除,以避免大多数冲突问题。所有SQL Server都将用于选择,以提高性能

EF4是否可以确保更改只存储在第一个SQL server上?在保存之前覆盖SaveChanges(..)并切换连接字符串是一个好主意,但我不确定这是否可行,以及EF4是否会喜欢它


如果不可能,那么将EF4与多个SQL Server和对等复制一起使用时的最佳做法是什么?

设置连接字符串的最佳且可能唯一可靠的地方是覆盖创建的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

End Class

Update:尝试动态更改连接字符串会引发以下错误,因此我们正在寻找另一种方法-“在元数据注册后,不允许通过打开连接或使用MetadataWorkspace构建连接来修改连接。”您能否提供一个关于如何在新上下文中传递实体更改的示例?通过添加、修改多个实体并可能彼此链接,是否可以做到这一点?