【问题标题】:My database won't update, something wrong with my connection string我的数据库不会更新,我的连接字符串有问题
【发布时间】:2020-05-24 18:07:26
【问题描述】:

我多年来一直试图解决这个问题,我尝试了不同的方法,但似乎没有任何效果。我已经成功完成了迁移,现在我的项目有了一个迁移文件。我正在尝试更新我的数据库,但每次尝试都会失败。

作为记录,我正在使用 Macbook 并为项目使用 Visual Code。我在命令行中输入了这个

dotnet ef database update InitialCreate

我也试过这个:

dotnet ef database update -c LoanContext Development

这是我输入上述内容时在命令行中显示的内容

Build started...
Build succeeded.
info: Microsoft.EntityFrameworkCore.Infrastructure[10403]  

Entity Framework Core 2.2.6-servicing-10079 initialized 'LoanContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: None

System.Data.SqlClient.SqlException (0x80131904):建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:TCP 提供者,错误:25 - 连接字符串无效)

System.Net.Sockets.SocketException (0x80004005):未定义错误:0

在 System.Data.SqlClient.SNI.SSRP.GetPortByInstanceName(String browserHostName, String instanceName)
在 System.Data.SqlClient.SNI.SNIProxy.CreateTcpHandle(数据源详细信息,Int64 timerExpire,对象 callbackObject,布尔并行) 在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity 身份,SqlConnectionString connectionOptions,SqlCredential 凭据,对象 providerInfo,字符串 newPassword,SecureString newSecurePassword,布尔重定向用户实例,SqlConnectionString userConnectionOptions,SessionData reconnectSessionData,布尔 applyTransientFaultHandling,字符串 accessToken) 在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions 选项,DbConnectionPoolKey poolKey,对象 poolGroupProviderInfo,DbConnectionPool 池,DbConnection owningConnection,DbConnectionOptions userOptions) 在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool 池,DbConnection owningObject,DbConnectionOptions 选项,DbConnectionPoolKey poolKey,DbConnectionOptions 用户选项) 在 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,布尔allowCreate,布尔onlyOneCheckConnection,DbConnectionOptions userOptions,DbConnectionInternal& 连接) 在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource1 重试,DbConnectionOptions userOptions,DbConnectionInternal oldConnection,DbConnectionInternal& 连接) 在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection externalConnection,DbConnectionFactory connectionFactory,TaskCompletionSource1 retry, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 重试,DbConnectionOptions userOptions) 在 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource1 retry) at System.Data.SqlClient.SqlConnection.Open() at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(Boolean errorsExpected) at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerDatabaseCreator.<>c__DisplayClass18_0.<Exists>b__0(DateTime giveUp) at Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.<>c__DisplayClass12_02.b__0(DbContext c, TState s) 在 Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState 状态,Func3 operation, Func3 verifySucceeded) 在 Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.Execute[TState,TResult](IExecutionStrategy 策略,Func2 operation, Func2 verifySucceeded,TState 状态) 在 Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.Execute[TState,TResult](IExecutionStrategy 策略,TState 状态,Func`2 操作) 在 Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerDatabaseCreator.Exists(布尔 retryOnNotExists) 在 Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerDatabaseCreator.Exists() 在 Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists() 在 Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(字符串 targetMigration) 在 Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(字符串 targetMigration,字符串 contextType) 在 Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.c__DisplayClass0_1.<.ctor>b__0() 在 Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action 动作)

ClientConnectionId:00000000-0000-0000-0000-000000000000

在建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:TCP 提供者,错误:25 - 连接字符串无效)

这是我的appsettings.json 文件

"Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
},
"AllowedHosts": "*",
"connectionStrings": {
    "DevConnection": "server=(local)\\sqlexpress;Database=LoanDB;Trusted_Connection=True;MultipleActiveResultSets=True"
}

startup.cs 文件中的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using WebAPI.Models;

namespace WebAPI
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

            services.AddDbContext<LoanContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("DevConnection")));
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseMvc();
        }
    }
}

我也尝试通过这个站点 https://www.connectionstrings.com/sql-server-2012/ 更改连接字符串。没有任何效果,对此的任何帮助将不胜感激。

【问题讨论】:

  • Configuration.GetConnectionString("DevConnection") 输出什么?第二个愚蠢的问题:您确定您在新机器上运行的是实际的 SqlExpress 服务吗?
  • 连接字符串出现错误:server=(local)\\sqlexpress;Database=LoanDB;Trusted_Connection=True;MultipleActiveResultSets=True 我通常从打开 SQL Server Management Studio 开始。登录窗口显示服务器名称(本地)和实例(sqlexpress)。您需要修改连接字符串以匹配。登录将显示凭据类型。它应该显示窗口以同意连接字符串“Trusted_Connection=True”。然后您正在使用的用户帐户将用于身份验证。数据库也必须具有相同的权限。
  • 在错误的末尾明确表示Connection string is not valid 。确保您的 SQL 服务器。
  • 我解决了这个问题,我删除了连接字符串中的服务器名称,显然将服务器添加到该字符串中不适用于 MacBook。感谢所有的答案!

标签: c# sql-server asp.net-web-api entity-framework-core asp.net-core-webapi


【解决方案1】:

您是否为 SQL Server 实例启用了 TCP?

启动 SQL Server 配置管理器并展开 SQL Server 网络配置和协议并检查值。以下示例显示 TCP/IP 已禁用 - 如果已禁用,则右键单击它并将其设置为启用并重新启动您的实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多