ModelSQLBuilder 1.2.3
dotnet add package ModelSQLBuilder --version 1.2.3
NuGet\Install-Package ModelSQLBuilder -Version 1.2.3
<PackageReference Include="ModelSQLBuilder" Version="1.2.3" />
paket add ModelSQLBuilder --version 1.2.3
#r "nuget: ModelSQLBuilder, 1.2.3"
// Install ModelSQLBuilder as a Cake Addin #addin nuget:?package=ModelSQLBuilder&version=1.2.3 // Install ModelSQLBuilder as a Cake Tool #tool nuget:?package=ModelSQLBuilder&version=1.2.3
ModelSQLBuilder
ModelSQLBuilder facilita o uso de banco de dados sem o uso de um ORM.
Principais caracteristicas
- Baseado em comandos SQL
- Transparente, qualquer comando gerado pode ser acessado como
string
- Modular, as features podem ser usadas independentemente uma da outra
Porque Usar
O ModelSQLBuilder foi idealizado em um cenário de banco de dados caótico onde o uso de um ORM traria mais problemas do que soluções, esse cenário pode ser caracterizado por bancos de dados de sistemas que já se tornaram legados bem como por falta de documentação e manuais que expliquem as regras implementadas.
Nestes casos o mais comum é fazer o acesso escrevendo as querys manualmente e as utilizando no código da aplicação. Este é o problema que o ModelSQLBuilder resolve.
Como Utilizar
Um pacote do nuget esta disponível para download e uso em qualquer projeto C#, podendo ser encontrado através da ferramenta do visual studio, bem como através do comando do CLI do .net core.
Para iniciar o uso é necessário a criação de uma classe que sirva como modelo de dados para a implementação como por exemplo.
public class People
{
public int Id {get; set;}
public string FirstName {get; set;}
public string Role {get; set;}
public string CPF {get; set;}
public string Document {get; set;}
public DateTime BirdDate {get; set;}
public Double Value {get; set;}
}
É uma classe simples que guarda algumas informações sobre uma pessoa, agora devemos preparar esta classe simples para o uso da nossa biblioteca.
[Entity("cbpessoa")]
public class People : ModelBase<People>
{
[Field("id_cbpessoa", PostgreTypes.INT, true)]
public int Id {get; set;}
[Field("nome_str", PostgreTypes.STRING)]
public string FirstName{get; set;}
[Field("cargo_str", PostgreTypes.STRING)]
public string Role{get; set;}
[Field("cpf_str", PostgreTypes.STRING)]
public string CPF {get; set;}
[Field("rg_str", PostgreTypes.STRING)]
public string Document{get; set;}
[Field("data_nascimento",PostgreTypes.DATETIME)]
public DateTime BirdDate{get; set;}
[Field("value", PostgreTypes.DOUBLE)]
public Double Value{get; set;}
}
O que fizemos aqui foi adicionar alguns atributos e adicionar uma herança de `ModelBase<T> onde.
T
é a nossa própria classe, dessa forma estamos dizendo a biblioteca qual o formato de dados estamos esperando na saida.
Os dois atributos adicionadas foram Entity
para a classe, sinalizando o que vem a ser a nossa tabela, e Field
em cada propriedade que representa um campo da tabela, vamos ver melhor os parâmetros que cada uma dos atributos recebe.
Entity
Este atributo serve apenas para classes e representa uma tabela do banco de dados ele recebe apenas um parâmetro string que é o nome da tabela a qual ele fará referência.
Field
Este atributo é mais complexo, ele pode receber até três parâmetros, em ordem
- Nome.: O nome do campo assim como ele é no banco de dados na tabela em questão
- Tipo.: O tipo do campo é uma sinalização onde o tipo do objeto em C# é sinalizado para a biblioteca através das constantes que a mesma disponibiliza, realizando assim uma "tradução" de tipos para os tipos do banco de dados
- Chave.: Caso queira usar o campo como chave para esta tabela, independentemente de ele ser ou não uma
Primary Key
no banco de dados esse parâmetro deve sertrue
, caso contrário, pode ser omitido
Com a nossa classe preparada para representar uma tabela nós podemos começar a usufruir dos métodos que temos disponíveis no nosso ModelBase
.
Podemos dividir a biblioteca em dois grupos, um grupo para abstrair o código SQL e outro para lidar com conexões, tratando-as automaticamente dentro de transações com using
.
Abstraindo o SQL
Através dos métodos implementados no ModelBase
podemos abstrair o código SQL conforme o exemplo abaixo.
static void Main(string[] args)
{
var johnDoe = new People();
johnDoe.Id = 156;
johnDoe.FirstName = "John";
johnDoe.Document = "12345678";
johnDoe.CPF = "123456";
johnDoe.BirdDate = DateTime.Now;
johnDoe.Value = 2300.50;
System.Console.WriteLine(johnDoe.BuildSelect());
System.Console.WriteLine(johnDoe.BuildUpdate());
System.Console.WriteLine(johnDoe.BuildWhereByKey());
System.Console.WriteLine(johnDoe.BuildInsert());
System.Console.WriteLine(johnDoe.BuildDelete());
}
Através dos métodos apresentados acima temos acesso a string
que representa o comando SQL desta forma podemos executa-lo utilizando qualquer biblioteca que queiramos.
Vamos analisar cada método independentemente.
BuildSelect
Esse método retorna a string
do comando select
sem where
, caso seja preciso selecionar dados utilizando a chave como valor comparativo pode-se usar o método BuildWhereByKey
que será explicado em detalhes mais adiante, caso seja preciso um where
mais complexo o mesmo pode ser concatenado de dentro de uma string à saída do método.
Saída do método
select
nome_str,
cpf_str,
rg_str,
data_nascimento,
value,
id_cbpessoa,
cargo_str
from cbpessoa
BuildUpdate
Esse método retorna a string
do comando update
contendo na cláusula where
uma comparação de igualdade pelo campo determinado como chave no atributo field na classe que representa a tabela, caso seja preciso, embora não aconcelhável, é simples adicionar cláusulas ao where concatenando strings
, bem como remover.
Saída do método
update cbpessoa set
nome_str = 'John',
cargo_str = '',
cpf_str = '123456',
rg_str = '12345678',
data_nascimento = '2019-05-25 10:37:04',
value = 2300.5
where id_cbpessoa = 156;
BuildWhereByKey
Este método constrói e retorna uma cláusula where
simples através dos campos marcados como chave nos atributos da classe que representa a tabela em questão. Caso mais de um campo seja marcado como chave, mais condições serão acrescentadas à cláusula where
utilizando o operador lógico and
.
Saída do método
where id_cbpessoa = 156;
BuildInsert
Constrói e retorna um comando de insert
com os campos presentes na classe. Vale ressaltar que os campos marcados como chave não serão retornados no insert
.
Saída do método
insert into cbpessoa (
nome_str,
cargo_str,
cpf_str,
rg_str,
data_nascimento,
value
) values (
'John',
'',
'123456',
'12345678',
'2019-05-25 10:37:04',
2300.5
);
BuildDelete
Monta um comando de delete
com where
seguindo as mesmas regras do método BuildWhereByKey
Saída do método
delete
from cbpessoa
where id_cbpessoa = 156;
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.