Нет, это небезопасно, приведение никогда не безопасно, и оно может взорваться в любое время, когда ваше приложение работает.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Даже за то, что 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-запросов и приведение от одного поставщика базы данных к другому.Но для простого приложения это нормально.