Saya memiliki proyek ASP.NET Core di mana saya menyimpan string koneksi PostgreSQL saya dalam variabel lingkungan. Ketika saya mencoba melakukan migrasi awal, pembangunan proyek berhasil, tetapi kemudian ia mengeluarkan pengecualian:

System.ArgumentNullException: Nilai tidak boleh nol. (Parameter 'connectionString').

Jadi saya berasumsi bahwa itu tidak membaca string koneksi dengan benar. Saya memberikan string koneksi ke DbContext saya dalam metode ConfigureServices seperti ini:

services.AddDbContext<GoalsContext>(options =>  
  options.UseNpgsql(Environment.GetEnvironmentVariable("CONNECTION_STRING")));

Saya juga telah mencoba memperbaikinya dengan membuat implementasi IDesignTimeDbContextFactory seperti ini:

public class GoalsContextFactory : IDesignTimeDbContextFactory<GoalsContext>
{
  public GoalsContext CreateDbContext(string[] args)
  {
    var optionsBuilder = new DbContextOptionsBuilder<GoalsContext>();
    optionsBuilder.UseNpgsql(Environment.GetEnvironmentVariable("CONNECTION_STRING");

    return new GoalsContext(optionsBuilder.Options);
  }
}

Bantuan apapun akan sangat dihargai.

Pembaruan: Saya telah seperti yang disarankan dalam komentar membaca dokumentasi resmi tentang variabel dan konfigurasi Lingkungan dan saya telah memeriksa apakah variabel ada di tempat pertama dengan membuat pengontrol dengan satu metode, yang mengembalikan string koneksi seperti ini:

[HttpGet]
public string GetConnectionString()
{
  return _config["CONNECTION_STRING"];
}

Dan string koneksi yang benar memang muncul di browser ketika saya meluncurkannya, tetapi ketika saya mencoba menambahkan migrasi awal ke database, pengecualian yang telah saya sebutkan masih dilemparkan.

Saya juga mencoba mengomentari implementasi IDesignTimeDbContextFactory saya dan secara manual menambahkan panggilan ke metode .AddEnvironmentVariables di Program.cs saya (yang saya baca dilakukan secara otomatis, tetapi saya masih ingin mencoba), tetapi tidak ada yang berpengaruh - pengontrol saya masih mengeluarkan string koneksi sementara migrasi Entity Framework Core masih tidak menerimanya.

Jadi singkatnya, ya, string koneksi ada dan saya bahkan dapat menampilkannya, tetapi migrasi masih gagal karena pengecualian yang sama.

0
Mantas Ptakauskas 9 Maret 2020, 17:31

1 menjawab

Jawaban Terbaik

Sesuai komentar saya.

Lihat Perintah Variabel Lingkungan Baris

Juga, jika Anda ingin melewati pengaturan variabel, Anda harus melihat ke dalam Metode OnConfiguring yang berlebihan dari Konteks dan menggunakan tanda IsConfigured pada parameter DbOptions yang diteruskan ke hanya dibaca dari file ketika tidak ada konfigurasi yang valid yang diteruskan ke konteks.

Saya harus memperingatkan itu untuk mengatakan, bahwa ini juga mengarah ke masalah ketika pengembang lain menggunakan solusi dan juga, Anda tidak boleh memeriksa file yang Anda baca ke dalam repositori kontrol sumber publik karena ini adalah salah satu cara orang mendapatkan kredensial untuk hal-hal yang seharusnya mereka' t, lihat Pengguna Rahasia

0
Tom Ruyter 10 Maret 2020, 20:01