Bancos de dados para o desenvolvimento da área de trabalho do Windows: Bem-vindo à selva

A Microsoft esqueceu um detalhe – ou está conscientemente nos dizendo algo.

Vico Biscotti Blocked Desbloquear Seguir Seguindo 12 de janeiro Pexels

Eu era um entusiasta da Microsoft. E eu sou um desenvolvedor de área de trabalho do Windows. Você pode julgar e parar de ler aqui. Ou você pode estar no mesmo barco e se perguntando por que a Microsoft decidiu abandonar o desenvolvimento para o Windows.

Estou prestes a enviar um aplicativo de desktop . Eu estive longe de swdev por alguns anos, mas eu escrevi código para os trinta anos anteriores. Uma dúzia de anos com o .NET.

Então, para o meu novo aplicativo, decidi pela excelente Windows Presentation Foundation. WinForms se foram, e UWP parece órfão e confinado ao Windows 10. Eu conheço pessoas que compram aplicativos de desktop do Windows (eu sou um deles, é claro). Mas eu não conheço ninguém que os compre na Microsoft Store, ou mesmo verifica isso de vez em quando, e temo que isso não melhore tão cedo. Eu ainda mantenho meu antigo Windows Phone em uma prateleira, como um aviso.

Sem dizer, o WPF acompanha o Entity Framework. Não necessariamente, claro, mas de preferência.

Como db local eu comecei com um mdf (assim, o SQL Server). Eu disse a mim mesmo: “Vamos ver o que será melhor, talvez o SQL Compact ou algo assim. Esse não é o problema. ”Sendo um aplicativo pessoal, era obrigatório ter uma configuração única, tudo incluído, mas isso nunca foi um problema na minha vida.

O momento dos toques finais veio, e o que parecia um “toque final” acabou sendo uma dor no rabo. Eu estive longe de swdev por um tempo. Demais, talvez.

A Microsoft esqueceu um detalhe

Ou está conscientemente nos dizendo algo. Lembre-se que Nadella é um homem da nuvem.

Tudo é cloud hoje em dia – eu entendo – mas muitos negócios e produtividade ainda funcionam offline. E a Microsoft foi muito boa nisso.

Surprise – my bad – o SQL Server Express precisa de uma configuração separada em qualquer caso. Eu deveria ter imaginado.

Eu estava apostando em LocalDb , o sabor simplificado do SQL Server Express. Da Microsoft :

“O SQL Server Express LocalDB é uma versão leve do Express que possui todos os recursos de programação, é executada no modo de usuário e possui uma instalação rápida, com configuração zero e uma pequena lista de pré-requisitos.”

Instâncias de usuário. Excelente. Eu estava esperando para entregar também aos usuários sem direitos de administrador.

Mas… Você pode obter um arquivo msi de LocalDb (para que você possa mais ou menos ter uma instalação silenciosa), mas os direitos de administrador são necessários em qualquer caso para a instalação ( modo de usuário, não permissões de usuário…). Além disso, não pode ser protegido por senha nem criptografado. É destinado a ser usado por desenvolvedores, mas não é para desenvolvedores. É para o tempo de design .

Em poucas palavras, LocalDb não é exatamente o banco de dados baseado em arquivo que você poderia esperar da Microsoft 26 anos após a introdução do Access.

Mas a história não termina aqui. O Windows 7 e x86 não são suportados pelo SQL Server Express 2017. A Microsoft decidiu que metade dos meus possíveis clientes têm um sistema operacional obsoleto (o Windows 7 ainda atende a um terço dos usuários globais de desktop / laptop) e não pode ser tratado.

Além disso, tente instalar um SQL Server Express anterior – para suporte ao Windows 7 – e… ele não pode abrir seu mdf porque você o criou com o Visual Studio 2017 ou com o SQL Server mais recente. Nenhuma ferramenta de downgrade disponível para um problema tão comum, nem qualquer opção para criar um MDF "mais antigo". Na esperança de ler seu mdf no Windows 7, você terá que migrar manualmente seu mdf para uma versão anterior – usando uma ferramenta “antiga” do SQL Server – e renunciar a usar o Visual Studio para gerenciá-lo. Uau. Eles realmente deveriam ter desenvolvedores em mente ao projetar essa armadilha.

OK, vamos reverter. SQL Compact . Instalação privada , sem privilégios de administrador, proteção por senha. Perfeito.

Bem, não . O SQL Compact ainda vive em um canto escuro dos servidores da Microsoft, mas, a partir de fevereiro de 2013, está obsoleto. Você pode ir com ele, por sua conta e risco, mas o Windows 8 e 10 não estão nas especificações e zapping a configuração externa requer alguma solução alternativa. Além disso, o Visual Studio e o SQL Server Management Studio dizem claramente que o SQL Compact está completamente inativo e esquecido. Você esta por sua conta.

Mais reversão. Acessar (Oh meu…)

O Entity Framework não suporta o Access. Sim, você leu corretamente. A Microsoft não suporta seu próprio banco de dados popular com seu próprio ORM recomendado.

As implementações estão lá, por exemplo, JetEntityFrameworkProvider , mas ele suporta apenas o código primeiro. E é de bubibubi . Tenho certeza que Bubi é um grande desenvolvedor, mas eu esperava algo mais … oficial.

Uma vez eu escrevi um ORM para Access e .NET, mas meu novo aplicativo já é baseado em EF.

Usando o Linq para DataSet , com o Access? Nunca usei, mas tenho certeza que ele paga um preço significante para o desempenho – entre outras questões, você tem que preencher completamente o Dataset -, e eu já tenho que ser cuidadoso nesse lado. Não parece uma solução mainstream. Eu não estou pronto para trabalhar muito para conseguir outras surpresas.

Você pode imaginar que comecei a suar.

Ok, vamos sair do território da Microsoft. Qual é o mecanismo de banco de dados SQL independente mais renomado, vindo com o suporte da EF? SQLite , claro.

Mas o SQLite vem com algumas limitações. Você não pode descartar uma coluna , por exemplo, ou adicionar uma restrição. Imagine suportar cópias completas do banco de dados por meio de cada alteração de esquema.

E a senha / criptografia não é suportada nativamente pelo SQLite. Claro, alguém lhe dirá que existe um plugin para tudo. Com algumas limitações Mas, novamente, há o outro plugin, que funciona de forma diferente, ou desaparece após alguns anos …

MySQL ? Oracle, o concorrente mais feroz da Microsoft. Tenho certeza de que eles fazem o melhor possível, para dar suporte ao .NET contra o Java – e que eu não terei mais surpresas -, mas deixe-me preocupar. Então, você precisa encontrar o caminho para uma instalação silenciosa, cruzando os dedos.

E você pode continuar, e continuar, navegando em muitos mares e sonhando com descobertas e refatorações sem fim.

Assim?

Então, ficamos com muitas opções e sem solução.

A Microsoft tem duas respostas claras: o SQL Express na área de trabalho (com um instalador separado e volumoso, sem senha, sem criptografia) ou o Azure (isso significa que a nuvem não é apropriada para muitos aplicativos de área de trabalho).

A Microsoft esqueceu – ou quer esquecer – aplicativos de desktop e sua necessidade de bancos de dados integrados baseados em arquivos. Você pode encontrar muitas opções, mas nenhuma solução direta e completa está lá, claramente e totalmente suportada pela Microsoft agora e no longo prazo.

O que eu vou fazer?

Primeiro de tudo, tenho que aceitar que não pertenço a esta era Cloud & Chaos. Eu provavelmente vou lutar com isso pelo resto da minha vida.

Agora, com meu aplicativo de desktop?

Bem, pretendo expandir meu produto para as equipes. Então, o SQL Server está no meu caminho, uma vez que eu prefiro ficar no território da Microsoft, se possível. Melhor começar com essa tecnologia desde o começo.

Eu ficarei com um arquivo mdf, migrando-o para uma versão mais antiga (então, use um SQL Server antigo) e renunciando para gerenciá-lo a partir do Visual Studio.

Então eu pensei em implantar LocalDb silenciosamente, usando a linha de comando msiexec, incorporada na minha configuração (dado que o msi é fornecido):

msiexec /ic:tempSqlLocalDB2017.msi

Mas… o Msi não pode ser executado dentro de outro msi (e estou usando um projeto do Visual Studio Installer, que prefiro a outras opções por várias razões). Então, decidi executá-lo na primeira execução do aplicativo (caso contrário, eu poderia ter escrito um wrapper de configuração ou usado um construtor de configuração diferente). Claro, eu tenho que

  • detectar possíveis instalações anteriores do SQL Server (verificando o registro e, em seguida, os arquivos),
  • decidir qual mecanismo instalar (LocalDb 2014 no Windows 7 – x86 ou x64 -, mais LocalDb 2017 – x64 -),
  • avisar o usuário (que certamente ficará feliz com a configuração extra, especialmente se for um consumidor),
  • e, provavelmente, distribuir a (s) instalação (ões) SQL em conjunto com a aplicação, ou como uma configuração opcional (senão, será necessário um download LocalDb separado).

Nenhum comentário, Microsoft.

Nenhuma criptografia e os usuários podem ser adicionados somente pela lógica do aplicativo ou no nível do SQL Server.

Funciona, mas não sou feliz. Além disso, levei dias para tomar minha decisão, implementar e testar.

Agora, se você me der licença, eu tenho um backlog para trabalhar, já que eu não esperava desperdiçar tanto tempo no banco de dados local depois de 22 anos do primeiro Visual Studio.