C# 在一个事务作用域中处理多个数据库连接
我编写了以下函数C# 在一个事务作用域中处理多个数据库连接,c#,mysql,entity-framework,transactionscope,C#,Mysql,Entity Framework,Transactionscope,我编写了以下函数在一个事务范围中包含两个数据库上下文。我正在使用MySql和ef5.0 private static void SyncPremiumStores(JoyRydeWebPortalData.joyryde_WebPortalEntities contextWebPortal, JoyRydeMallStoreData.joyryde_MallStoreEntities contextMallStore) { using (TransactionScope
在一个事务范围中包含两个数据库上下文
。我正在使用MySql
和ef5.0
private static void SyncPremiumStores(JoyRydeWebPortalData.joyryde_WebPortalEntities contextWebPortal, JoyRydeMallStoreData.joyryde_MallStoreEntities contextMallStore)
{
using (TransactionScope scope = new TransactionScope())
{
foreach (var objWebPortalPremiumStore in contextWebPortal.tbl_premium_store.Where(x => x.INT_DATA_TRANS_STATUS == 0).ToList())
{
try
{
var objMallStore = contextMallStore.tbl_store.Where(x => x.LNG_STORE_ID == objWebPortalPremiumStore.LNG_STORE_ID).FirstOrDefault();
if (objMallStore != null)
{
JoyRydeMallStoreData.tbl_premium_store objMallPremiumStore = new JoyRydeMallStoreData.tbl_premium_store()
{
DAT_CREATED = objWebPortalPremiumStore.DAT_CREATED,
DAT_PREMIUM_FROM = objWebPortalPremiumStore.DAT_PREMIUM_FROM,
DAT_PREMIUM_TO = objWebPortalPremiumStore.DAT_PREMIUM_TO,
LNG_PRIMARY_STORE_ID = objMallStore.LNG_PRIMARY_STORE_ID,
LNG_STORE_ID = objMallStore.LNG_STORE_ID,
TXT_PACK_NAME = ""
};
contextMallStore.tbl_premium_store.Add(objMallPremiumStore);
objWebPortalPremiumStore.INT_DATA_TRANS_STATUS = 1;
}
contextMallStore.SaveChanges();
contextWebPortal.SaveChanges();
scope.Complete();
}
catch (Exception ex)
{
LogUtility.WriteErrorLog(ex);
}
}
}
}
在执行时,它会让我犯错误
var objMallStore=contextMallStore.tbl_store.Where(x=>x.LNG_store_ID==objWebPortalPremiumStore.LNG_store_ID).FirstOrDefault()代码>带有内部异常消息的行
当前不支持多个同时连接或同一事务中具有不同连接字符串的连接。
我需要在一个事务中更新两个不同的数据库。
如何实现???我认为这是MySQL的一个限制,因为只有XA事务支持分布式事务(多个单独的事务资源参与全局事务)
据我所知,MySql.net连接器确实支持分布式事务。请尝试在连接字符串中设置AutoEnlist=false
。通过添加AutoEnlist=false
,我现在可以使用它的可能副本。谢谢:)