无法连接到外部数据库ASP.NET

时间:2020-03-29 15:47:08

标签: c# asp.net .net sql-server

我正在尝试使用ASP.NET API连接到外部数据库,但我一直收到此错误:

Microsoft.Data.SqlClient.SqlException:'无效的对象名称'Parkings'。 Microsoft.EntityFrameworkCore.Relational.dll中发生类型为“ Microsoft.Data.SqlClient.SqlException”的异常,但未在用户代码中处理 无效的对象名称“停车场”。

但是,我可以从我的nodejs服务器应用程序连接到数据库,并在其中为数据添加种子。

代码:

IP,用户名和密码出于明显原因未显示

appsettings.json

{
  "ConnectionStrings": {
    "ParkingContext": "Server=xxx.xxx.xxx.xxx,xxxxx;Database=Parkings;User Id=xxxxx;Password=xxxxxx;"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}

Startup.cs:

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

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services) {
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
        services.AddDbContext<ParkingContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("ParkingContext")));
        services.AddScoped<IParkingRepository, ParkingRepository>();
        services.AddSwaggerDocument();
        services.AddCors(options => options.AddPolicy("AllowAllOrigins", builder => builder.AllowAnyOrigin()));
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
        if (env.IsDevelopment()) {
            app.UseDeveloperExceptionPage();
        } else {
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseSwaggerUi3();
        app.UseSwagger();
        app.UseRouting();

        app.UseEndpoints(endpoints => {
            endpoints.MapControllers();

        });
    }
}

上下文类

public class ParkingContext : DbContext {
    public DbSet<Parking> Parkings { get; set; }
    public DbSet<Entry> Entries { get; set; }
    public ParkingContext(DbContextOptions<ParkingContext> options) : base(options) {

    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
        var connectionString = @"Server=xxx.xxx.xxx.xxx,xxxx;Database=Parkings;User Id=xxxx;Password=xxxx;";
        optionsBuilder.UseSqlServer(connectionString);
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder) {
        base.OnModelCreating(modelBuilder);
    }
}

2 个答案:

答案 0 :(得分:1)

首先,我不认为您应该两次指定连接字符串。您在这里指定它:

services.AddDbContext<ParkingContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("ParkingContext")));

在这里:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
        var connectionString = @"Server=xxx.xxx.xxx.xxx,xxxx;Database=Parkings;User Id=xxxx;Password=xxxx;";
        optionsBuilder.UseSqlServer(connectionString);
    }

第一个就足够了。

EntityFrameWork是一个ORM,因此您需要确保DbSet与数据库中的现有表相对应,并且实体中的所有属性均与这些表中的现有列相对应。

如果您检查所有这些,但仍然失败。然后从MSDN code first to an existing database

阅读这篇文章

答案 1 :(得分:0)

您可以尝试在连接字符串中使用InitialCatalog属性,而不是Database属性。否则,请确保此处正确使用了“停车场”对象。