【问题标题】:How to establish connection to remote database sql server?如何建立与远程数据库 sql server 的连接?
【发布时间】:2021-01-08 09:00:10
【问题描述】:

当尝试使用 enable-migrations 连接到远程数据库时,我收到一个坚持检查连接字符串的错误,我想要做的就是将我的上下文连接到远程数据库以提供并用“迁移”映射一个“用户”类, 这是连接字符串:

<add name="TransformerANDConnectDB" connectionString="data source=REMOTE_SERVER_xx ;initial catalog=TransformerANDConnectDB;user id=xxx ;password=xxx ;Integrated Security=True ;MultipleActiveResultSets=True;"  providerName="System.Data.SqlClient" />

否则我会告诉你启用迁移后发生的错误:

 ---> System.Data.SqlClient.SqlException: Échec de l'ouverture de session de l'utilisateur 'ADSLOCAL\G558253'.
  à  System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString 

访问数据库时出错。这通常意味着与数据库的连接失败。检查连接字符串是否正确,以及是否使用了适当的 DbContext 构造函数来指定它或在应用程序的配置文件中找到它。有关 DbContext 和连接的信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=386386。有关失败的详细信息,请参阅内部异常。

这是我的上下文文件:

public class TransformerConnectMEContext  :DbContext 
{
    public TransformerConnectMEContext()
            : base("Name=TransformerANDConnectDB")
    {
        Database.SetInitializer<TransformerConnectMEContext>(new TransformerConnectMEContextInitializer());
    }
    public DbSet<User> Users { get; set; }
}

内部异常:

System.Data.Entity.Core.ProviderIncompatibleException: The provider did not return a ProviderManifestToken string. ---> System.Data.SqlClient.SqlException: Échec de l'ouverture de session de l'utilisateur 'ADSLOCAL\XXXX'.
   à System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling, SqlAuthenticationProviderManager sqlAuthProviderManager)
   à System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
   à System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
   à System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
   à System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
   à System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
   à System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource 1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
   à System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource 1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
   à System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   à System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   à System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource 1 retry)
   à System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource 1 retry)
   à System.Data.SqlClient.SqlConnection.Open()
   à System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.<Open>b__38(DbConnection t, DbConnectionInterceptionContext c)
   à System.Data.Entity.Infrastructure.Interception.InternalDispatcher 1.Dispatch[TTarget,TInterceptionContext](TTarget target, Action 2 operation, TInterceptionContext interceptionContext, Action 3 executing, Action 3 executed)
   à System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.Open(DbConnection connection, DbInterceptionContext interceptionContext)
   à System.Data.Entity.SqlServer.SqlProviderServices.<>c__DisplayClass31.<UsingConnection>b__2f()
   à System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1.<Execute>b__0()
   à System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func 1 operation)
   à System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation)
   à System.Data.Entity.SqlServer.SqlProviderServices.UsingConnection(DbConnection sqlConnection, Action 1 act)
   à System.Data.Entity.SqlServer.SqlProviderServices.UsingMasterConnection(DbConnection sqlConnection, Action 1 act)
   à System.Data.Entity.SqlServer.SqlProviderServices.GetDbProviderManifestToken(DbConnection connection)
   à System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection)
   --- Fin de la trace de la pile d'exception interne ---
   à System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection)
   à System.Data.Entity.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection)
   --- Fin de la trace de la pile d'exception interne ---
   à System.Data.Entity.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection)
   à System.Data.Entity.Infrastructure.DefaultManifestTokenResolver.<>c__DisplayClass1.<ResolveManifestToken>b__0(Tuple 3 k)
   à System.Collections.Concurrent.ConcurrentDictionary 2.GetOrAdd(TKey key, Func 2 valueFactory)
   à System.Data.Entity.Infrastructure.DefaultManifestTokenResolver.ResolveManifestToken(DbConnection connection)`
  

【问题讨论】:

  • 您是否按照建议检查了内部异常,以找出它失败的确切原因?检查是为了确保连接正常。在这种情况下,它似乎没有。你需要找出确切的原因。
  • @ADyson 内部异常不在帖子中?内部异常太长,无法全部发布。
  • 那么内部异常的主要信息是什么?我怀疑我们需要整个堆栈跟踪,只需要消息。
  • @ADyson 我已经更新了帖子。

标签: c# asp.net entity-framework entity-framework-migrations ef-fluent-api


【解决方案1】:

在连接字符串中将 Integrated Security 设置为 false。

当 Integrated Security 设置为 false 时,会在连接中指定用户 ID 和密码。如果为 true,则使用当前 Windows 帐户凭据进行身份验证

【讨论】:

    猜你喜欢
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多