連接字串
大部分的資料庫提供者都需要 連接字串 才能連線到資料庫。 連接字串:
- 可以包含需要保護的敏感性資訊。
- 當應用程式移至不同的環境時,可能需要變更,例如開發、測試和生產環境。
如需詳細資訊,請參閱 保護驗證流程
ASP.NET Core
ASP.NET Core 組態可以儲存各種提供者的 連接字串:
- 在
appsettings.Development.json
或appsettings.json
檔案中。 - 在環境變數中
- 使用 Azure 金鑰保存庫
- 使用秘密管理員工具
警告
秘密不應該新增至組態檔。
例如, 秘密管理員工具 可以儲存資料庫密碼。 當 Scaffolding 與使用秘密管理員時,連接字串 包含 Name=<database-alias>
。
如需詳細資訊,請參閱 ASP.NET Core 檔的組態一節。
dotnet user-secrets init
dotnet user-secrets set ConnectionStrings:YourDatabaseAlias "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=YourDatabase"
然後,在 Scaffolding 中使用包含 的 連接字串Name=<database-alias>
。
dotnet ef dbcontext scaffold Name=ConnectionStrings:YourDatabaseAlias Microsoft.EntityFrameworkCore.SqlServer
警告
本文使用本機資料庫,其不需要使用者進行驗證。 實際執行應用程式應該使用可用的最安全驗證流程。 如需已部署測試與實際執行應用程式驗證的詳細資訊,請參閱安全驗證流程。
下列範例顯示儲存在 中的 appsettings.json
連接字串。
{
"ConnectionStrings": {
"BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
},
}
內容通常會在 中Program.cs
設定 連接字串 從組態讀取。 請注意,GetConnectionString 方法會尋找索引鍵為 ConnectionStrings:<connection string name>
的組態值。 GetConnectionString
需要 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));
WinForms 和 WPF 應用程式
WinForms、WPF 和 ASP.NET 4 個應用程式已嘗試並測試 連接字串 模式。 連接字串 應該新增至應用程式的App.config
檔案,或使用 Web.config
ASP.NET 時。 包含敏感性資訊的連接字串,例如使用者名稱和密碼,應該使用 受保護的組態來保護組態檔的內容。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="BloggingDatabase"
connectionString="Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" />
</connectionStrings>
</configuration>
提示
providerName
因為資料庫提供者是透過程式代碼設定,因此在App.config中儲存的EF Core 連接字串上不需要此設定。
接著,您可以在內容OnConfiguring
的方法中使用 ConfigurationManager
API 讀取 連接字串。 您可能需要新增架構元件的參考 System.Configuration
,才能使用此 API。
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);
}
}
通用 Windows 平台 (UWP)
UWP 應用程式中的連接字串通常是只指定本機檔名的SQLite 連線。 它們通常不包含敏感性資訊,且不需要在部署應用程式時變更。 因此,這些 連接字串 通常可以留在程序代碼中,如下所示。 如果您想要將它們移出程式代碼,UWP 支援設定的概念,請參閱 UWP 檔案 的應用程式設定一節以取得詳細數據。
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");
}
}