いいえ、安全ではありません。キャストは決して安全ではなく、アプリケーションの実行中にいつでも失敗する可能性があります。SqlConnection
は確かにあなたから派生していますが、これは構成ファイルでパラメーター化できるため、が返さDbConnection
れることは保証されていません。また、なぜキャストする必要があるのですか? コードを特定の実装と結合させて、コードを単独でテストできなくすることを避けるために、階層の上位にあるクラスを使用することを常にお勧めします。database.CreateConnection()
SqlConnection
SqlConnection
EnterpriseLibrary は物事を抽象的に保つ上でかなり良い仕事をしますが、このキャストですべてを殺しています。また、使い捨てのリソースが常に適切に破棄されるようにする必要があります。代わりにこれはどうですか:
Database database = DatabaseFactory.CreateDatabase("connection string");
using (var conn = database.CreateConnection())
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "SELECT id FROM foo";
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
// TODO: work with the results here
}
}
}
このようにして、コードは構成ファイルのデータベースの変更に対して脆弱ではなくなります。もちろん、この SQL はまだハードコードされており、この状況を処理する ORM があります。また、SQL クエリを記述したり、あるデータベース プロバイダーから別のデータベース プロバイダーにキャストしたりすることに時間を浪費する代わりに、アプリケーションの実際のドメインに集中することもできます。しかし、単純なアプリケーションの場合、これで問題ありません。