Не удается подключиться к внешней базе данных ASP.NET - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь подключиться к внешней базе данных с помощью моего ASP. NET API, но постоянно получаю эту ошибку:

Microsoft.Data.SqlClient.SqlException: 'Неверный объект название «Парковка». Исключение типа «Microsoft.Data.SqlClient.SqlException» произошло в Microsoft.EntityFrameworkCore.Relational.dll, но не было обработано в коде пользователя. Неверное имя объекта «Parkings».

Однако я не могу подключиться к базе данных из моих 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 ]

1 голос
/ 29 марта 2020

Прежде всего, я не думаю, что вы должны указывать строку подключения дважды. Вы указываете это здесь:

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, поэтому вам необходимо убедиться, что что ваши DbSets соответствуют существующим таблицам в базе данных, а все свойства в ваших сущностях соответствуют существующим столбцам в этих таблицах.

Если вы все это проверите, но все равно не получится. Затем прочитайте этот пост из MSDN код сначала в существующую базу данных

0 голосов
/ 29 марта 2020

Вы можете попробовать использовать свойство InitialCatalog в строке подключения вместо свойства Database. В противном случае убедитесь, что объект «Парковка» здесь используется правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...