事务复制活动时实体框架模型的问题
Posted
技术标签:
【中文标题】事务复制活动时实体框架模型的问题【英文标题】:Problems with Entity Framework Model when Transactional Replication active 【发布时间】:2011-08-08 04:47:19 【问题描述】:我有一种情况,我使用 SQL Server 事务复制从我的主数据库到我的故障转移数据库。我有一个主站点,而我的故障转移网站正在使用我的故障转移数据库。
两个网站(使用实体框架)是相同的(希望数据库也是如此)。
我的问题是,如果我的复制处于活动状态,我的故障转移网站上的某些操作会崩溃。一旦我停用我的复制,操作就会正常进行。
我的猜测是我的故障转移网站的 EntityModel 和数据库在暴露于复制时存在一些并发问题。
有没有人遇到过类似的问题?任何有事务复制 + 实体框架经验的人?
这是我得到的例外:
at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
at System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache)
at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options)
at System.Data.Objects.ObjectContext.SaveChanges()
at Library.XXXXEntities.Context_SavingChanges(Object sender, EventArgs e)
in C:\SVN\Branches\Prod - 1.68.7\Library\LINQ\Audit.cs:line 38
at System.Data.Objects.ObjectContext.OnSavingChanges()
at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options)
at System.Data.Objects.ObjectContext.SaveChanges() at Library.Provider.Save()
in C:\SVN\Branches\Prod - 1.68.7\Library\XXXX.Provider.cs:line 57
at XXXX.mnuExportGeneric.RecreatePositionsToBeUnique()
at XXXX.mnuExportGeneric.Export(Int32 programId, DirectoryInfo directoryDestination, Boolean exportInventory, Int32 CurrencyListID, Int32 configurationId, Boolean subFolder)
at XXXX.mnuExport.Export(Int32 ProgramId, String TempExportFolder, String ExportFolder, TreeView treeViewErreurs, Int32 CurrencyListID, Boolean exportInventory, Int32[] configurationsId)
映射可能存在问题,但仅当事务复制处于活动状态时。
更新:我已经完全脱离了我的应用程序环境,只是在复制“存在”时尝试在故障转移数据库的表中插入新行,而不仅仅是活动接缝非法的。明天我将尝试完全删除复制...或进行更剧烈的更改...
谢谢!
【问题讨论】:
为什么要对故障转移应用程序执行更改?该更改不会反映在主数据库中。您得到什么类型的异常以及您的实体使用什么并发检查? 我正在对故障转移应用程序执行更改作为一项安全措施,以检查一切是否正常。我发起的操作是标准的“业务”操作。而且我的实体正在使用默认的并发检查(我认为那是 AppendOnly)。 【参考方案1】:这可能不是 EF 的问题,而是您的复制设置的问题。
SQL Server 允许在任何节点进行更改的复制,但这需要企业版,请参阅:http://technet.microsoft.com/en-us/library/ms151196.aspx
您可能正在尝试更新只读副本。
【讨论】:
确实,我一直在阅读,Transactionnal Replication 使我的复制数据库成为只读的。我看到了复制过程使用的特殊存储过程。我想这是有道理的。谢谢!以上是关于事务复制活动时实体框架模型的问题的主要内容,如果未能解决你的问题,请参考以下文章