Nesta aula iremos aprender como criar tabelas no banco de dados de forma dinâmica utilizando técnicas de ORM.
Nesta aula vamos aprender como criar tabelas no banco de dados através do ORM .
Vamos criar um método chamado CriarTabela() na interface IBase.
namespace Database
{
public Interface IBase
{
int Key {get;}
void Salvar();
void Excluir();
void CriarTabela(); // método para criar a tabela no banco de dados
List< IBase> Todos();
List< IBase> Busca();
}
}
using System.Reflexion;
namespace Database
{
public class Base : IBase
{
public string tipoPropriedade(PropertyInfo pi)
{
switch (pi.PropertyType.Name)
{
case "Int32":
return int;
case "Int64":
return "bigint";
case "Double":
return "decimal(9,2)";
case "Single":
return "float";
case "DateTime":
return "datetime"
case "Boolean":
return "tinyint";
default:
return "varchar(255)"
}
}
public virtual void CriarTabela()
{
using (SqlConnection connection = new SqlConnection(connectionstring))
{
string chavePrimaria = "";
List< string > campos = new List< string >();
foreach(PropertyInfo pi in this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
OpcoesBase pOpcoesBase = (OpcoesBase)pi.GetCustomAttribute(typeof(OpcoesBase))
if (pOpcoesBase != null && pOpcoesBase.UsarNoBancoDeDados)
{
if (!pOpcoesBase.ChavePrimaria)
{
chavePrimaria = pi.Name + " int identity,";
}else
{
campos.Add(pi.Name + " " + tipoPropriedade(pi) + ",");
}
}
}
string tabelaExiste = "IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[" + this.GetType().Name +"s]')
AND OBJECTPROPERTY(id,N'IsUserTable') = 1)" +
"DROP TABLE " + this.GetType().Name + "s";
SqlCommand command = new SqlCommand(tabelaExiste, connection);
command.Connection.Open();
command.ExecuteNonQuery();
string queryString = "CREATE TABLE " + this.GetType().Name + "s (";
queryString += chavePrimaria;
queryString += string.Join(",",campos.ToArray());
queryString += ");";
command = new SqlCommand(queryString, connection);
command.ExecuteNonQuery();
}
}
}
}
Vamos criar uma nova classe chamada Carro para que, através dessa classe, seja criada uma nova tabela no banco de dados.
namespace Database
{
public class Carro : Base
{
[OpcoesBase (UsarNoBancoDeDados = true, chavePrimaria = true, UsarParaBuscar = true)]
public int ID {get;set;}
[OpcoesBase (UsarNoBancoDeDados = true)]
public string Nome {get;set}
[OpcoesBase (UsarNoBancoDeDados = true)]
public string Marca {get;set}
[OpcoesBase (UsarNoBancoDeDados = true )]
public int Quantidade {get;set;}
[OpcoesBase (UsarNoBancoDeDados = true )]
public int Valor {get;set;}
}
}
Vamos criar uma instância da Classe Carro ao carregar o formulário no evento Load e chamar o método CriarTabela().
namespace TresCamadas
{
public partial class Form1 :
{
public Form1()
{
InitializeComponenent()
}
private void Form1_Load(object sender, EventArgs e)
{
new Carro().CriarTabela();
loadAll();
}
}
}
Vamos criar um registro na tabela Carro,criar a instância da classe Carro, preencher suas propriedades e chamar o método Salvar()
namespace TresCamadas
{
public partial class Form1 :
{
public Form1()
{
InitializeComponenent()
}
private void Form1_Load(object sender, EventArgs e)
{
var carro = new Carro();
carro.CriarTabela();
carro.Nome = "Fiesta"
carro.Marca = "Ford";
carro.Quantidade = 2;
carro.Valor = 25000.50;
carro.salvar();
loadAll();
}
}
}
Nesta aula iremos aprender como criar tabelas no banco de dados de forma dinâmica utilizando técnicas de ORM.
Nesta aula vamos aprender como criar tabelas no banco de dados através do ORM .
Vamos criar um método chamado CriarTabela() na interface IBase.
namespace Database
{
public Interface IBase
{
int Key {get;}
void Salvar();
void Excluir();
void CriarTabela(); // método para criar a tabela no banco de dados
List< IBase> Todos();
List< IBase> Busca();
}
}
using System.Reflexion;
namespace Database
{
public class Base : IBase
{
public string tipoPropriedade(PropertyInfo pi)
{
switch (pi.PropertyType.Name)
{
case "Int32":
return int;
case "Int64":
return "bigint";
case "Double":
return "decimal(9,2)";
case "Single":
return "float";
case "DateTime":
return "datetime"
case "Boolean":
return "tinyint";
default:
return "varchar(255)"
}
}
public virtual void CriarTabela()
{
using (SqlConnection connection = new SqlConnection(connectionstring))
{
string chavePrimaria = "";
List< string > campos = new List< string >();
foreach(PropertyInfo pi in this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
OpcoesBase pOpcoesBase = (OpcoesBase)pi.GetCustomAttribute(typeof(OpcoesBase))
if (pOpcoesBase != null && pOpcoesBase.UsarNoBancoDeDados)
{
if (!pOpcoesBase.ChavePrimaria)
{
chavePrimaria = pi.Name + " int identity,";
}else
{
campos.Add(pi.Name + " " + tipoPropriedade(pi) + ",");
}
}
}
string tabelaExiste = "IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[" + this.GetType().Name +"s]')
AND OBJECTPROPERTY(id,N'IsUserTable') = 1)" +
"DROP TABLE " + this.GetType().Name + "s";
SqlCommand command = new SqlCommand(tabelaExiste, connection);
command.Connection.Open();
command.ExecuteNonQuery();
string queryString = "CREATE TABLE " + this.GetType().Name + "s (";
queryString += chavePrimaria;
queryString += string.Join(",",campos.ToArray());
queryString += ");";
command = new SqlCommand(queryString, connection);
command.ExecuteNonQuery();
}
}
}
}
Vamos criar uma nova classe chamada Carro para que, através dessa classe, seja criada uma nova tabela no banco de dados.
namespace Database
{
public class Carro : Base
{
[OpcoesBase (UsarNoBancoDeDados = true, chavePrimaria = true, UsarParaBuscar = true)]
public int ID {get;set;}
[OpcoesBase (UsarNoBancoDeDados = true)]
public string Nome {get;set}
[OpcoesBase (UsarNoBancoDeDados = true)]
public string Marca {get;set}
[OpcoesBase (UsarNoBancoDeDados = true )]
public int Quantidade {get;set;}
[OpcoesBase (UsarNoBancoDeDados = true )]
public int Valor {get;set;}
}
}
Vamos criar uma instância da Classe Carro ao carregar o formulário no evento Load e chamar o método CriarTabela().
namespace TresCamadas
{
public partial class Form1 :
{
public Form1()
{
InitializeComponenent()
}
private void Form1_Load(object sender, EventArgs e)
{
new Carro().CriarTabela();
loadAll();
}
}
}
Vamos criar um registro na tabela Carro,criar a instância da classe Carro, preencher suas propriedades e chamar o método Salvar()
namespace TresCamadas
{
public partial class Form1 :
{
public Form1()
{
InitializeComponenent()
}
private void Form1_Load(object sender, EventArgs e)
{
var carro = new Carro();
carro.CriarTabela();
carro.Nome = "Fiesta"
carro.Marca = "Ford";
carro.Quantidade = 2;
carro.Valor = 25000.50;
carro.salvar();
loadAll();
}
}
}