在现有的SqlConnection中打开一个DbContext连接
如果在现有ado.net SqlConnection中打开实体框架的DbContext连接,我有兴趣,只要它们都使用相同的连接字符串,即在完全相同的数据库上操作? 例如: using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new System.TimeSpan(0, 30, 0))) { using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); DoStuffWithEF(connectionString); ... } } void DoStuffWithEF(string connectionString) { using (var context
0 2024-04-16
编程技术问答社区
如何检测到回滚已经发生?
我正在大型业务应用程序中寻找一个错误,在大型业务应用程序中,业务流程失败,但部分持续到数据库中.为了使事情更难弄清楚,该过程仅每隔几周一次失败,每次失败之间都成功处理了数十万.当并发/工艺数量上升时,误差频率似乎会上升. 到目前为止,我们已经能够重新创建该程序所看到的内容. (.NET 4.7.1框架) using (var transactionScope = new TransactionScope(TransactionScopeOption.RequiresNew)) { using (var sqlConnection = new SqlConnection("Server=localhost;Database=Database1;Trusted_Connection=True")) { sqlConnection.Open(); // Doing some unwanted nested manual transa
0 2024-04-15
编程技术问答社区
对交易型NTFS(TxF)有什么实际的、企业级的经验?
背景: 我知道这个问题 ntfs(txf)和本文描述如何使用它,但是我正在寻找现实世界经验具有合理的大量企业系统,其中大量斑点数据(例如文档和/或照片)需要持续一旦交易,并多次阅读... P> 我们期望每天写几千份文档,并阅读每小时数万个文档. 我们可以将索引存储在文件系统中或SQL Server中,但必须能够在几个盒子上将其扩展. 我们必须保留备份和恢复数据以进行灾难恢复的能力. 问题: 任何现实世界中的企业级经验(TXF)? 相关问题: 有人尝试使用TXF尝试分布式交易,其中同一文件立即将同一文件投入到两个镜像服务器? 有人尝试使用文件系统和数据库进行分布式事务? 您可以共享任何绩效问题/可靠性问题/绩效数据? 在交易是一个问题之前,是否有人在此规模上做过事情? 编辑:要更加清楚,我已经研究了其他技术,包括SQL Server 2008新的FileStream数据类型,但是 这个问题仅针对交易文件系统. . 更多资源: TXF
0 2024-04-14
编程技术问答社区
TransactionScope在某些机器上自动升级到MSDTC?
在我们的项目中,我们正在使用TransactionsCope来确保数据访问层在交易中执行其操作.我们的目标是 要求在最终用户的机器上启用MSDTC服务. 麻烦是,在我们一半的开发人员机器上,我们可以禁用MSDTC.另一半必须启用它,否则他们在[服务器]上获得" MSDTC是不可用的" 错误消息. 确实让我挠头,让我认真考虑回到基于Ado.net交易对象的类似家庭跨度的解决方案.这似乎是疯狂的 - 在我们开发人员的一半上有效(不升级)的代码在另一个开发人员的上升级. 我希望更好地回答追踪为什么交易升级为DTC ,但不幸的是不是. 这是一个示例的代码,会导致麻烦,在试图升级的机器上,它试图在第二个连接上升级.Open()(是的,当时没有其他连接打开.) using (TransactionScope transactionScope = new TransactionScope() { using (SqlConnection connection = n
0 2024-04-10
编程技术问答社区
分布式交易累积Azure SQL,在房屋中SQL Server会导致错误
可以在房屋SQL Server实例和Azure SQL数据库之间进行交易. 我有以下测试案例. public class TransactionsTest { [Fact] public void Test1() { var premisesDatabaseContext = new OnPremisesDatabaseContext(); var azureSQLDatabaseContext = new AzureSQLDatabaseContext(); using (TransactionScope scope = new TransactionScope()) { premisesDatabaseContext.Database.Connection.Open(); azureSQLDatabaseContext.Database
0 2024-03-26
编程技术问答社区
MVC 3 : MSDTC事务管理器无法从源头拉动事务。
我正在使用MVC 3与实体一起使用,现在我使用了控制器的以下代码 using (var scope = new TransactionScope()) { _myRepository.DeleteFM1(id); _myRepository.DeleteFM2(id, name); scope.Complete(); } 和我的 deletefm2 方法恰好是我在实体类中定义的方法如下: public void DeleteFM2(int id, string name) { var data= _repositoryMD.Fetch().Where(mColl => mColl.Col1 == id); if (data!= null) { //inser
0 2024-03-15
编程技术问答社区
如何在EF DbContext和AspNet Membership之间共享一个连接以避免交易升级到DTC
我有一个ASP.NET MVC3应用程序,该应用程序使用EF 4.1 DBContext,数据库 - 第一数据层.在调整应用程序之前,我倾向于对数据模型进行更改,因此EDMX方法效果很好.该应用程序与包括元数据参考的特殊EF连接字符串正常运行. 但是,软膏中有一个飞.该应用程序还使用ASP.NET成员资格和需要标准连接字符串的角色.我有几种用例,涉及会员表和其他(EF管理的)表.作为两个使用单独的连接字符串,涉及两者都需要DTS来处理它们的交易.如果我能提供帮助,我不想走那条路线,我宁愿应用程序的所有部分都使用相同的连接. 让EF使用普通的连接字符串运行,但是让我感到不安.谁能告诉我这是怎么做的? 解决方案 您在这里有几个选择. (我知道这很长,但是请尝试阅读整个内容).如果您可以在需要此类交易的情况下提供实际情况. 首先,您正在做一个错误的假设,即如果EF和成员资格都具有相同的连接字符串,则它将使用共同的连接.有时可能是正确的,但不能保证.连接池试图为给定的字
2 2024-03-12
编程技术问答社区
使用TransactionScope和MS DTC偶尔出现System.ArgumentNullException
我偶尔会在我们的生产服务器上获得此例外: System.ArgumentNullException: Value cannot be null. at System.Threading.Monitor.Enter(Object obj) at System.Data.ProviderBase.DbConnectionPool.TransactedConnectionPool.TransactionEnded(Transaction transaction, DbConnectionInternal transactedObject) at System.Data.SqlClient.SqlDelegatedTransaction.SinglePhaseCommit(SinglePhaseEnlistment enlistment) at System.Transactions.TransactionStateDelegatedCommitting.Enter
0 2024-03-10
编程技术问答社区
TransactionScope是否需要DTC服务?
从我的阅读内容中,为了使用.NET中的TransactionsCope,您需要Windows中的分布式事务协调器服务才能运行.我有那种服务关闭,我的应用似乎正在运行相同,并且回滚交易没有问题. 我想念什么吗? 它如何工作?我正在运行Windows 7并在VisualStudio 2010中运行WebApp. 解决方案 更现代的Windows版本具有内核中的迷你DTC版本.它不是分布式的,而是使用相同的API-但每个事务范围只能处理一个ressource. transactionscope在一开始就使用它,然后"促进"交易到实际DTC时添加第二个资源(在您的情况下,资源是数据库连接).因此,只要您的用例是ISMPLE,您就可以避免DTC分布式部分的(高)开销,并且可以在不运行的情况下工作. 可以在 http://en.wikipedia.org/上找到有关内核交易经理的更多信息. wiki/kernel_transaction_manager MS还添加了它
0 2024-03-09
编程技术问答社区
分布式交易完成。要么把这个会话列入一个新的事务中,要么就是NULL事务
只是好奇是否有人有这个特殊的错误并知道如何解决它? 场景如下... 我们使用在Windows Server 2008 IIS Farm上运行的Enterprise库ASP.NET Web应用程序连接到SQL Server 2008群集后端. MSDTC已打开. DB连接被合并. 我的怀疑是,沿线的某个地方有一个失败的MSDTC事务,连接返回到池中,另一个页面上的下一个查询正在接收不良的连接,并遇到了这个特定的错误.有趣的是,我们在一个不需要分布式事务的查询上遇到了这个错误(致力于两个数据库等).当我们遇到错误时,我们只是在进行选择查询(无交易). 我们进行了SQL分析,并且查询在SQL Server上进行了运行,但再也没有回来(因为MSDTC事务已经在连接中中止了). 其他一些相关的错误是: 不允许新请求开始 因为它应该有效 事务描述符. 内部.NET框架数据提供商错误60. 解决方案 MSDTC的默认超时时间为90秒,如果执行一个查询超过此
0 2024-03-09
编程技术问答社区
在存储过程事务中使用TransactionScope不工作
根据我的理解,C#TransactionScope在存储过程中包装T-SQL BEGIN / COMMIT TRANSACTION时仍然可以工作. 我有以下C#方法,该方法首先EF Save,然后调用具有自己的事务的存储过程,然后通过HTTP 调用外部服务 public async Task DoSomething(MyDto dto) { using (var scope = new TransactionScope()) { //Save First var myEntity = await _dbContext.MyEntity.Where(x=>x.Id == dto.Id).SingleOtDefaultAsync(); // Assign properties here from dto to MyEntity and then save entity
4 2024-01-19
编程技术问答社区
SCOPE_IDENTITY在这种情况下是否有效?
当我们使用从system..transactions(创建一个实例的Transactionscope)的转移时入场. 这就是所谓的自动加入.不错的功能.但是可以通过连接字符串的参数(enrist = false)关闭它.在这种情况下,打开连接将不会被征募. 但以后可以手动征募. 因此,我的问题是:对于某些给定的SQLConnection的实例,我该如何确定该连接是否被征入(进入System.Transaction). 我可以查看参数的连接字符串.但这不会做到,因为正如我说的那样,可以手动征募联系. 解决方案 该框架似乎不允许. 也许我们可以讨论您为什么需要知道这些信息? TransactionsCopeOptions为您提供了何时创建交易的灵活性. 但是,拒绝"否"以找到答案,稍后再浏览一点源,我创建了此代码,确实有效.请注意,此代码可以随时停止使用,并在框架上进行补丁!!!! static bool IsEnlisted(SqlConnection s
2 2024-01-19
编程技术问答社区
单个事务下具有相同连接字符串的多个连接,提升事务?
使用ado.net,并在单个事务(使用System.Transactions.transactionscope)内与MS SQL Server数据库创建多个连接,DOSENSE.TRASACTIONS将事务从轻量级事务管理器提升到分布式事务协调器(即使所有连接对象的连接字符串相同,vista)上的内核交易协调器即使是相同的? 在这种特定情况下,文档有些模棱两可.它说,如果在交易期间与服务器打开另一个连接,则交易将得到提升,但并未说出是否一直这样做,或者仅当连接字符串不同时.如果连接字符串相同,它将提高交易是没有意义的,但是如果这样做,它基本上会使轻质交易管理器完全无用,IMO. 解决方案 在当前版本中,它总是会提升交易,不幸的是. 正如您所说,使Transactionscope的用处不如其他情况.我相信有计划在以后的版本中进行更改.
6 2024-01-19
编程技术问答社区
活动目录是否具有交易意识?
简单的问题,但我在任何地方都找不到答案:Active Directory Transaction-Aware吗? 换句话说,是否会回滚以下更改(因为我没有打电话scope.Complete()): using (var scope = new TransactionScope()) { DirectoryEntry entry = ...; entry.Properties["givenName"].Value = "New Given Name"; entry.CommitChanges(); } 如果不是,是否可以以某种方式启用此?现在,我有执行数据库更新和相应的广告更新的代码,如果它们以某种方式失败,则可以为广告更新提供补偿逻辑.该解决方案远非最佳. 亲切的问候, 罗纳德·怀尔登伯格(Ronald Wildenberg) 解决方案 简短答案是 - 不. ActiveIvedIrectory本质上是LDAP的实现(有一些精美的扩展
0 2024-01-10
编程技术问答社区
分布式交易:.NET框架vs.NET核心
我有以下代码示例: static void Main(string[] args) { TransactionManager.DistributedTransactionStarted += (sender, eventArgs) => { Console.WriteLine("Promoted to distributed transaction!"); }; ​ const string connectionString = @"Server=localhost\SQLEXPRESS;Database=master;Integrated Security=true;"; ​ using (var tx = new TransactionScope()) using (var conn1 = new SqlConnection(connectionString)) using (var conn2 = new
0 2024-01-08
编程技术问答社区
没有DTC的TransactionScope替代品
是否有任何替代transactionscope的选择,不需要启用DTC ?? 在交易中,我需要进行两个操作: 创建一个用户(使用会员-SQL会员提供商) 做一个插入操作. 解决方案 TransactionsCope使用.NET中的LTM-轻质事务管理器.只有当您在同一交易中打开多个连接或在数据库之间进行的连接,应transactionscope促进交易到基于2PC的TX-ENAGER,DTC. . 对于MS SQL Server 2008及更高版本,DTC只有在与不同的 dbs打开连接时才会涉及.或者,如果您要从多个线程打开同一交易中的连接 作为一个副点:我在 castle.transactions.transactions.transactions . 侧点#2:如果您使用TransactionsCope,请确保明确声明隔离级别,否则您将序列化所有交易(iNCLATIONLEVEL.SERIALIZABLE)! 其他解决方案 在会员的连接字符串
2 2024-01-07
编程技术问答社区
当处置时,TransactionScope会抛出TransactionAbortedException。
我有以下方案: 父进程启动TransactionsCope,使用TransAction Interop.getTransmitterPropagationToken创建了识别事务的令牌,将数据插入数据库. TransactionsCope完成. 使用上述令牌启动了另一个过程,它创建了事务,然后将其用于创建TransactionsCope.此过程还将数据插入数据库. TransactionsCope完成并被处置. 在这一点上,父过程试图处理其TransactionsCope,并抛出了TransactionBortedException.例外没有任何理由无法提交. 堆栈跟踪: at System.Transactions.TransactionStatePromotedAborted.BeginCommit(InternalTransaction tx, Boolean asyncCommit, AsyncCallback asyncCallback, Object a
6 2024-01-07
编程技术问答社区
用于Windows服务器事务/错误处理的服务总线1.0
我敢肯定我不是第一个这样说的人,但是在那里的Windows Server较小的服务总线1.0上严重缺乏文档...我希望有些MS Insiders可以帮助清除一些事情... 使用队列/主题的服务是否在隐式,环境交易中运行?例如,考虑以下代码段: [ServiceBehavior] public class MySbService : IDoWork { [OperationBehavior] void DoSomeWork(WorkRequest request) { DoDatabaseWork(); DoMoreDatabaseWork(); } } 在上面的样本中,如果DoMoreDatabaseWork()引发异常,则不会创建明确的TransactionScope> DoDatabaseWork()?换句话说,排队操作是否在MSDTC跟踪的环境交易中运行? 是否运行 如果抛出异常(像MSMQ一
2 2024-01-06
编程技术问答社区
使用TransactionScope的间歇性System.ArgumentNullException
我有一个Windows Service应用程序,该应用程序正在执行对SQL Server的一些调用.我有一个特定的工作要做,其中涉及将一行保存到Message表格,并在Buffer表中更新多行. 我已经将这两个SQL语句包裹到了a TransactionScope中,以确保它们既要承诺又不承诺. 高级代码看起来像这样: public static void Save(Message message) { using (var transactionScope = new TransactionScope()) { MessageData.Save(message.TransactionType, message.Version, message.CaseNumber, message.Rou
10 2024-01-06
编程技术问答社区
使用跨流程的交易
我正在尝试使用System.Transactions(TransactionsCope)来协调一组过程,每个过程都可以进行一些数据库工作.最终,所有流程都需要通过一个父进程进行委托或原子卷回去.不幸的是,到目前为止,我没有尝试过任何事情. 我的基本策略是在父进程中进行thressactionscope,将其保存到文件中,并调用加载文件,使用其自身transactionscope中的交易并返回父母的子进程. . 但这对我不起作用.当我从打电话回第一个孩子时,我有时会看到父母交易已被标记为中止.试图克隆它,然后抛出TransactionBortedException. 我还看到了第二个孩子试图进行交易的例外,我会用代码0x8004d00e获得TransactionException. 我正在尝试做 transactionscope跨应用程序和过程,,和这是我尝试过的一些事情,没有成功: 通过加载交易在子过程中通过依赖性克隆()创建依赖性传播 在保存之前,请通
10 2024-01-06
编程技术问答社区