[RESOLVIDO] É possível criar uma classe de Insert/Update genérica com C# ?

  • Vou ir direto ao ponto, é possível criar uma classe de insert ou update no C# que seja genérica?
  • No caso, eu posso enviar qualquer tipo de objeto e ela salvaria ou faria update no banco?

Mais ou menos como o Hibernate faz no Java, porém eu entendo que existam os mapeamentos que permitem isso.

Atualmente estou fazendo algo do tipo

public int Salvar(Pais pais)
{
	MySqlCommand comando = null;
	try
	{
		AbrirConexao();
		comando = new MySqlCommand("INSERT INTO pais (idpais, nome, sigla) VALUES(@idpais, @nome, @sigla)", conexao);
		comando.Parameters.AddWithValue("@idpais", pais.idpais);
		comando.Parameters.AddWithValue("@nome", pais.nome);
		comando.Parameters.AddWithValue("@sigla", pais.sigla);

		return comando.ExecuteNonQuery();
	}
	catch (Exception erro)
	{

		throw erro;
	}
	finally
	{
		FecharConexao();
	}
}

Bom, só realmente para tirar dúvida, e se caso alguém tenha alguma sugestão eu agradeço.

Pode usar o Entity Framework ou NHibernate (mais pesado como o do Java).

1 curtida

É mais rápido fazer tudo a mão, ou aprender a usar o Entity Framework ? Confesso que já ouvi falar mas não conheço de fato.

Pra o que voce perguntou sim, facilita em cruds. Mas eu prefiro acima de tudo ter o controle do SQL, não gosto de soluções mais amarradas a modelo OO como Entity Framework e NHibernate. Prefiro o Dapper pra .NET e o JDBC Template pra Java, são mais leves inclusive.

O ideal é que você aprenda a fazer primeiramente na mão, porque as camadas de persistência é uma camada acima das implementações de IDbConnection, IDbCommand e assim por diante, então aquele código da sua pergunta é perfeito porque sabe fazer um cadastro com a camada padrão de acesso aos bancos .NET.

Depois desse conhecimento pode partir para Entity Framework principalmente a versão Core se estiver trabalhando com ASPNET Core porque a mesma foi reescrita do Zero, apesar que a versão 6 também foi muito atualizado e está com bom aspecto de desempenho.

Existem pessoas que não gostam de trabalhar com Entity Framework ou qualquer camada Full ORM por achar que é pesado, que esconde a geração da SQL e isso não é verdade, nos conseguimos ver tudo o que ele faz, e se estiver construindo alguma SQL não performática o programador consegue arrumar.

A maioria dos programadores fazem o seguinte a camada ORM para Criar, Atualizar e Excluir registros e Micro ORM para desenvolver SQL Complexas, acham que isso ajudam e muito o desempenho.

Sua pergunta?
Sim é possível criar uma classe Genérica para suas operações, vai escrever menos código, mas, acho que acaba escrevendo o número do SQL do mesmo jeito não tem por onde escapar.

Se você procura velocidade faça com Entity Framework e procure sempre observar o que ele executa de SQL na hora de SQL complexas o resto não muda muito e o desempenho é muito satisfatório.

Ok, entendi perfeitamente. Sua resposta foi muito esclarecedora.
Obrigado