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