1

以下代碼:如何避免使用移動服務對Azure主數據庫進行不必要的連接?

private void IsolateIssue() 
    { 
     using (var context = new SomeName.Models.MobileServiceContext()) 
     { 
      System.Diagnostics.Debug.WriteLine(context.Database.Connection.ConnectionString); 
      var numberOfItems = context.TodoItems.Count(); 
     } 
    } 

導致錯誤(主叫變種numberOfItems時):

類型 'System.Data.SqlClient.SqlException' 的異常出現在 EntityFramework.dll但未在用戶代碼中處理其他 信息:無法打開登錄請求的數據庫「主」。 登錄失敗。用戶'SomeLoginName'登錄失敗。

這是我的connectionString:

「數據源= ServerName.database.windows.net;初始 目錄= SomeDataBaseName;用戶 ID = SomeLoginName;密碼= SomePassword};異步 加工=真; TrustServerCertificate = FALSE;」

很明顯,它無法連接到主數據庫。鑑於用戶名和密碼,我也無法使用LinqPad連接到主數據庫(當我嘗試出現類似錯誤時)。但是,它根本不應連接到主數據庫。當我嘗試使用Linqpad在SomeDataBaseName上登錄時,我成功獲取了todoItems(17)的數量。這證明根據給定的目的,根本不需要訪問主數據庫。

首先,我必須確保我可以獲取移動服務中的項目數量。我怎麼做?初始目錄顯示它應該連接到SomeDataBaseName,並且不需要連接到主數據庫以獲取項目數。我如何避免它試圖這樣做?

萬一有幫助,這裏是堆棧跟蹤:

堆棧跟蹤「在System.Data.SqlClient.SqlInternalConnection.OnError(SqlException異常,布爾breakConnection,行動1 wrapCloseInAction)\r\n at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)\r\n at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)\r\n at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)\r\n at System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK)\r\n at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover)\r\n at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout)\r\n at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance)\r\n at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData)\r\n at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)\r\n at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)\r\n at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)\r\n at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)\r\n at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)\r\n at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource 1重試,DbConnectionOptions USEROPTIONS,DbConnectionInternal &連接)\ r \ n at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory,TaskCompletionSource 1 retry, DbConnectionOptions userOptions)\r\n at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource)System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection,TaskCompletionSource 1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)\r\n at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource 1 retry,DbConnectionOptions userOptions)\ r \ n 1重試)\ r \ n在系統。 Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource 1 retry)\r\n at System.Data.SqlClient.SqlConnection.Open()\r\n at System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.<Open>b__36(DbConnection t, DbConnectionInterceptionContext c)\r\n at System.Data.Entity.Infrastructure.Interception.InternalDispatcher 1.Dispatch [TTarget,TInterceptionContext](TTarget target,Action 2 operation, TInterceptionContext interceptionContext, Action 3 execution,Action 3 executed)\r\n at System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.Open(DbConnection connection, DbInterceptionContext interceptionContext)\r\n at System.Data.Entity.SqlServer.SqlProviderServices.<>c__DisplayClass34.<UsingConnection>b__32()\r\n at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1.<Execute>b__0()\r\n at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func 1 operation)\ r \ n at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action操作)\ r \ n System.Data.Entity.SqlServer.SqlProviderServices.UsingConnection(DbConnection sqlConnection,Action 1 act)\r\n at System.Data.Entity.SqlServer.SqlProviderServices.UsingMasterConnection(DbConnection sqlConnection, Action 1 act)\ r \ n在System.Data.Entity.SqlServer.SqlProviderServices.DropDatabase(SqlConnection sqlConnection,Nullable 1 commandTimeout, String databaseName)\r\n at System.Data.Entity.SqlServer.SqlProviderServices.DbDeleteDatabase(DbConnection connection, Nullable 1 (System.Data.Entity.Core.Common.DbProviderServices.DeleteDatabase(DbConnection連接,可爲空1 commandTimeout, StoreItemCollection storeItemCollection)\r\n at System.Data.Entity.Core.Objects.ObjectContext.DeleteDatabase()\r\n at System.Data.Entity.Internal.DatabaseOperations.Delete(ObjectContext objectContext)\r\n at System.Data.Entity.Database.Delete()\r\n at System.Data.Entity.DropCreateDatabaseIfModelChanges 1.InitializeDatabase(TContext上下文)\ r \ n在System.Data.Entity.Internal.InternalContext 。 <> c__DisplayClassf 1.<CreateInitializationAction>b__e()\r\n at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action)\r\n at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()\r\n at System.Data.Entity.Internal.LazyInternalContext.<InitializeDatabase>b__4(InternalContext c)\r\n at System.Data.Entity.Internal.RetryAction 1.PerformAction(TInput input)\ r \ n at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action 1 action)\r\n at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase()\r\n at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)\r\n at System.Data.Entity.Internal.Linq.InternalSet 1.Initialize()\ r \ n在System.Data.Entity.Internal.Linq。 InternalSet 1.get_InternalContext()\r\n at System.Data.Entity.Infrastructure.DbQuery 1.System.Linq.IQueryable.get_Provider()\ r \ n在System.Linq.Queryable。Count [TSource](IQueryable`1 source)\ r \ n

+0

您正在使用的TransactionScope? – usr

+0

當我在我的「TransactionScope」項目中搜索時,我沒有得到任何結果。所以這可能意味着:「不」。 – Daan

+0

是不是愚蠢的使用TransactionScope?如果我要創建一個新的數據庫並在TransactionScope中完成所有事務,那麼這種問題是否會再次出現? – Daan

回答

相關問題