String Koneksi
Sebagian besar penyedia database memerlukan string koneksi untuk menyambungkan ke database. String koneksi:
- Dapat berisi informasi sensitif yang perlu dilindungi.
- Mungkin perlu berubah saat aplikasi berpindah ke lingkungan yang berbeda, seperti pengembangan, pengujian, dan produksi.
Untuk informasi selengkapnya, lihat Mengamankan alur autentikasi
Inti ASP.NET
Konfigurasi ASP.NET Core dapat menyimpan string koneksi dengan berbagai penyedia:
appsettings.Development.json
Dalam file atauappsettings.json
.- Dalam variabel lingkungan
- Menggunakan Azure Key Vault
- Menggunakan alat Secret Manager
Peringatan
Rahasia tidak boleh ditambahkan ke file konfigurasi.
Misalnya, alat Secret Manager dapat menyimpan kata sandi database. Saat perancah dan menggunakan Manajer rahasia, string koneksi terdiri dari Name=<database-alias>
.
Lihat bagian Konfigurasi dari dokumentasi ASP.NET Core untuk informasi selengkapnya.
dotnet user-secrets init
dotnet user-secrets set ConnectionStrings:YourDatabaseAlias "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=YourDatabase"
Kemudian, dalam perancah, gunakan string koneksi yang terdiri dari Name=<database-alias>
.
dotnet ef dbcontext scaffold Name=ConnectionStrings:YourDatabaseAlias Microsoft.EntityFrameworkCore.SqlServer
Peringatan
Artikel ini menggunakan database lokal yang tidak mengharuskan pengguna untuk diautentikasi. Aplikasi produksi harus menggunakan alur autentikasi paling aman yang tersedia. Untuk informasi selengkapnya tentang autentikasi untuk aplikasi pengujian dan produksi yang disebarkan, lihat Mengamankan alur autentikasi.
Contoh berikut menunjukkan string koneksi yang disimpan di appsettings.json
.
{
"ConnectionStrings": {
"BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
},
}
Konteks biasanya dikonfigurasi Program.cs
dengan string koneksi dibaca dari konfigurasi. Perhatikan metode GetConnectionString mencari nilai konfigurasi yang kuncinya adalah ConnectionStrings:<connection string name>
. GetConnectionString
memerlukan namespace Microsoft.Extensions.Configuration.
var conString = builder.Configuration.GetConnectionString("BloggingContext") ??
throw new InvalidOperationException("Connection string 'BloggingContext'" +
" not found.");
builder.Services.AddDbContext<BloggingContext>(options =>
options.UseSqlServer(conString));
Aplikasi WinForms & WPF
Aplikasi WinForms, WPF, dan ASP.NET 4 memiliki pola string koneksi yang dicoba dan diuji. string koneksi harus ditambahkan ke file aplikasi App.config
Anda, atau Web.config
saat menggunakan ASP.NET. String koneksi yang berisi informasi sensitif, seperti nama pengguna dan kata sandi, harus melindungi konten file konfigurasi menggunakan Konfigurasi Terproteksi.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="BloggingDatabase"
connectionString="Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" />
</connectionStrings>
</configuration>
Tip
Pengaturan providerName
tidak diperlukan pada string koneksi EF Core yang disimpan di App.config karena penyedia database dikonfigurasi melalui kode.
Anda kemudian dapat membaca string koneksi menggunakan ConfigurationManager
API dalam metode konteks OnConfiguring
Anda. Anda mungkin perlu menambahkan referensi ke perakitan System.Configuration
kerangka kerja untuk dapat menggunakan API ini.
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["BloggingDatabase"].ConnectionString);
}
}
Universal Windows Platform (UWP)
String koneksi dalam aplikasi UWP biasanya adalah koneksi SQLite yang hanya menentukan nama file lokal. Mereka biasanya tidak berisi informasi sensitif, dan tidak perlu diubah saat aplikasi disebarkan. Dengan demikian, string koneksi ini biasanya tidak masalah untuk dibiarkan dalam kode, seperti yang ditunjukkan di bawah ini. Jika Anda ingin memindahkannya keluar dari kode, UWP mendukung konsep pengaturan, lihat bagian Pengaturan Aplikasi dari dokumentasi UWP untuk detailnya.
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=blogging.db");
}
}