o DbProviderFactories permite, basicamente, tornar o acesso ao banco de dados genérico, ou seja, você não precisa escrever código específico para o SQL Server e outro código para Oracle e outro... que utilizam classes diferentes. Com o DbProviderFactories, há um código genérico que acessa "qualquer" banco de dados, que vai ser determinado em tempo de execução da aplicação. É útil quando você tem clientes que utilizam bancos de dados diferentes. Veja mais detalhes em: