none
Linq To SQL para constução de Métodos Genéricos RRS feed

  • Pergunta

  • Olá pessoal!

    Estou estudando Linq to SQL e estou com dúvidas em algumas questões. Pesquisei na net e encontrei diversos materiais com exemplos utilizando o DataContext que é gerado pelo próprio VS.

    Na verdade eu sei que há a possibildade de criar uma DataContext personalizada. Eu quero fazer dessa forma pois a minha inteção é criar uma Camada de Dados Linq sem ser a o que o VS me dá. Então eu fiz da seguinte forma:

    /*Classe que representa a Entidade(Tabela) mapeada do banco*/
    [Table(Name = "tb_projetos")]
    public class Projeto
    {
          [Column(IsPrimaryKey = true, CanBeNull = False)]
          public int ProjetoID {get; set;}
    
          [Column]
          public string CodigoProjeto {get; set;}
    
          [Column]
          public string NomeProjeto {get; set;}
    }
    
    /*Classe que servirá como camada de dados*/
    public class DataAccessLayer : DataContext
    {
          public static readonly string CONN_STRING = "aqui vem minha string de conexão";
    
         //Construtor
         public DataAccessLayer(string connectionInfo) : base (connectionInfo)
         { }
    }

    Então agora vem minhas dúvidas: Em todos os exemplos que encontrei pela net o Insert, Update e Delete estavão sendo exmplificados de forma direta, ou seja, as variáveis estão recebendo os valores diretamente de controles de formulários e/ou uma classe-entidade, tipo:

    ...
    DataContex dc = new DataAccessLayer(CONN_STRING);
    
    var objProjeto = new Table<Projeto>()
    {
       objProjeto.CodigoProjeto = txtCodeProjeto.Text;
       objProjeto.NomeProjeto = txtNomeProjeto.Text;
       dc.InsertOnSubmit(objProjeto)
       dc.SubmitChange();
    } 
    

    Então, eu não gostaria de fazer dessa forma. Gostaria que o o meu método Insert fosse genérico, ou seja, eu expecificaria o DataContext, mas a Tabela(classe-entidade) que eu teria acesso aos campos(propriedades) para setar os valores, fosse identificado só no momento que eu estivesse chamando o método dentro de um formulário e daí eu só passaria o objeto referente a essa tabela. Não se se ficou bem claro o que eu desejo, mas seria tipo assim:

    /*Provavel método Insert*/
    public void Insert(Table T)
    {
         DataContext dc = new DataAccessLayer(CONN_STRING);
    
         //esse GetTable<> deve receber a Tabela que origina o objeto, mas deverá ser identificado apenas no formulário.
         dc.GetTable<Table>().InsertOnSubmit(t)
         dc.SubmitChanges();
    }
    /*Detalhe: não sei se o parametro passado seria esse tipo Table, pois só existe Table<> ou TableAttribut*/
    
    /*No formulario provavelmente seria assim*/
    
    var objProjeto = new Table<Projeto>();
    
    objProjeto.CodigoProjeto = txtCodigoProjeto.Text;
    objProjeto.NomeProjeto = txtNomeProjeto.Text;
    
    DataAccessLayer.Insert(objProjeto);
    
    //Não testei, não sei se está correto, eu estou todo confuso em como fazer isso.
    

    Então pessoal me dá uma ajuda. Ilumina minha visão, pois to ceguinho com isso.

    Desde já agradeço.

    quarta-feira, 26 de outubro de 2011 16:36

Respostas

Todas as Respostas