Object Relational Mapping - Criar tabelas

Nesta aula iremos aprender como criar tabelas no banco de dados de forma dinâmica utilizando técnicas de ORM.

assinaturaAssine nossa Comunidade

Object Relational Mapping - Criar tabelas

Nesta aula vamos aprender como criar tabelas no banco de dados através do ORM .

  1. Criar o método CriarTabela() na Interface

  2. 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();
               }
             }
            
          
  3. Implementar o método CriarTabela(), na classe Base.

    1. Criar uma variável chamada chavePrimaria para armazenar a chave primaria e setar como identity
    2. Faremos um método chamado tipoPropriedade para retornar o tipo de cada propriedade.
    3. Fazer a validação se tabela já existe.Se existir,excluir, senão, criar.
            
              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();
      
                      }
                    }
                  }
              }
             
           
  4. Agora vamos configurar uma classe para criar a tabela através desta classe.

  5. 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;}
    
                  }
              }
             
           
  6. Criar instância da Classe acima (Carro) e ver a criação da tabela no banco de dados.

  7. 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(); } } }
  8. Inserir Registro na tabela Carro

  9. 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(); } } }

Object Relational Mapping - Criar tabelas

Nesta aula iremos aprender como criar tabelas no banco de dados de forma dinâmica utilizando técnicas de ORM.

Próximas Aulas:
assinaturaAssine nossa Comunidade

Object Relational Mapping - Criar tabelas

Nesta aula vamos aprender como criar tabelas no banco de dados através do ORM .

  1. Criar o método CriarTabela() na Interface

  2. 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();
               }
             }
            
          
  3. Implementar o método CriarTabela(), na classe Base.

    1. Criar uma variável chamada chavePrimaria para armazenar a chave primaria e setar como identity
    2. Faremos um método chamado tipoPropriedade para retornar o tipo de cada propriedade.
    3. Fazer a validação se tabela já existe.Se existir,excluir, senão, criar.
            
              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();
      
                      }
                    }
                  }
              }
             
           
  4. Agora vamos configurar uma classe para criar a tabela através desta classe.

  5. 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;}
    
                  }
              }
             
           
  6. Criar instância da Classe acima (Carro) e ver a criação da tabela no banco de dados.

  7. 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(); } } }
  8. Inserir Registro na tabela Carro

  9. 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(); } } }