none
Consulta Sql com Linq sem o arquivo .Dbml RRS feed

Respostas

  • sim é possivel, porem um pouco mais trabalhoso!!

    você precisar ter o mapeamento de suas entidades em um arquivo XML, como por exemplo este:

     <?xml version="1.0" encoding="utf-8"?>
    <Database Name="dseg267" Class="Dseg267" xmlns="http://schemas.microsoft.com/linqtosql/dbml/2007">
    <Table Name="dbo.pbcatedt" Member="Pbcatedt">
      <Type Name="Pbcatedt">
       <Column Name="pbe_name" Member="Pbe_name" Type="System.String" DbType="VarChar(30) NOT NULL" CanBeNull="false" />
       <Column Name="pbe_edit" Member="Pbe_edit" Type="System.String" DbType="VarChar(254)" CanBeNull="true" />
       <Column Name="pbe_type" Member="Pbe_type" Type="System.Int16" DbType="SmallInt" CanBeNull="true" />
       <Column Name="pbe_cntr" Member="Pbe_cntr" Type="System.Int32" DbType="Int" CanBeNull="true" />
       <Column Name="pbe_seqn" Member="Pbe_seqn" Type="System.Int16" DbType="SmallInt NOT NULL" CanBeNull="false" />
       <Column Name="pbe_flag" Member="Pbe_flag" Type="System.Int32" DbType="Int" CanBeNull="true" />
       <Column Name="pbe_work" Member="Pbe_work" Type="System.String" DbType="Char(32)" CanBeNull="true" />
      </Type>
     </Table>
    </Database>
    

    ter sua entidade criada com os nomes identicos aos da coluna da tabela(a não ser que você altere no mapeamento)

      /// <summary>
      /// Classe exemplo, não está completa
      /// </summary>
      public class Pbcatedt
      {
        public string Pbe_name { get; set; }
        public string Pbe_edit { get; set; }
        public string Pbe_type { get; set; }
      }
    }
    

    e na hora da utilização, você irá informar aonde está o arquivo de mapeamento:

        SqlConnection conn = new SqlConnection("STRINGDECONEXAO");
        conn.Open();
        System.Data.Linq.Mapping.XmlMappingSource xmlMapping = System.Data.Linq.Mapping.XmlMappingSource.FromXml("mapeamento.xml");
        var db = new System.Data.Linq.DataContext(conn, xmlMapping);//Aqui informa o mapeamento
        System.Data.Linq.Table<Pbcatedt> tablePbcatedt = db.GetTable<Pbcatedt>();
        var query = from c in tablePbcatedt
              select c;
        List<Pbcatedt> lst = query.ToList();
        
        //Para inserir
        Pbcatedt novoPbcatedt = new Pbcatedt
        {
          Pbe_name = "Exemplo",
          Pbe_edit = "Exemplo",
          Pbe_type = "exemplo"
        };
        tablePbcatedt.Attach(novoPbcatedt);//Attacha um novo objeto do tipo da entidade
        db.SubmitChanges();//Salva as mudanças
    
    você ainda tem a opção de não usar o mapeamento XML, mas sim diretamente na classe atraves do namespace System.Data.Linq.Mapping;
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data.Linq.Mapping;
    
      /// <summary>
      /// Classe exemplo, não está completa
      /// </summary>
      [Table(Name="dbo.Pbcatedt")]//Nome da tabela
      public class Pbcatedt
      {
        [Column(Name="Pbe_name")]
        public string Pbe_name { get; set; }
        [Column(Name = "Pbe_edit")]
        public string Pbe_edit { get; set; }
        [Column(Name = "Pbe_type")]
        public string Pbe_type { get; set; }
      }
    

    e utliza-lo sem informar o mapemaento xml

        //Consulta
        SqlConnection conn = new SqlConnection("STRINGDECONEXAO");
        conn.Open();
        var db = new System.Data.Linq.DataContext(conn);
        System.Data.Linq.Table<Pbcatedt> tablePbcatedt = db.GetTable<Pbcatedt>();
        var query = from c in tablePbcatedt
              select c;
        List<Pbcatedt> lst = query.ToList();
        
        //Para inserir
        Pbcatedt novoPbcatedt = new Pbcatedt
        {
          Pbe_name = "Exemplo",
          Pbe_edit = "Exemplo",
          Pbe_type = "exemplo"
        };
        tablePbcatedt.Attach(novoPbcatedt);//Attacha um novo objeto do tipo da entidade
        db.SubmitChanges();//Salva as mudanças
    


    Olavo Oliveira Neto
    Se for útil marque como resposta e faça um Developer feliz :)
    sexta-feira, 14 de janeiro de 2011 11:51
    Moderador

Todas as Respostas

  • sim é possivel, porem um pouco mais trabalhoso!!

    você precisar ter o mapeamento de suas entidades em um arquivo XML, como por exemplo este:

     <?xml version="1.0" encoding="utf-8"?>
    <Database Name="dseg267" Class="Dseg267" xmlns="http://schemas.microsoft.com/linqtosql/dbml/2007">
    <Table Name="dbo.pbcatedt" Member="Pbcatedt">
      <Type Name="Pbcatedt">
       <Column Name="pbe_name" Member="Pbe_name" Type="System.String" DbType="VarChar(30) NOT NULL" CanBeNull="false" />
       <Column Name="pbe_edit" Member="Pbe_edit" Type="System.String" DbType="VarChar(254)" CanBeNull="true" />
       <Column Name="pbe_type" Member="Pbe_type" Type="System.Int16" DbType="SmallInt" CanBeNull="true" />
       <Column Name="pbe_cntr" Member="Pbe_cntr" Type="System.Int32" DbType="Int" CanBeNull="true" />
       <Column Name="pbe_seqn" Member="Pbe_seqn" Type="System.Int16" DbType="SmallInt NOT NULL" CanBeNull="false" />
       <Column Name="pbe_flag" Member="Pbe_flag" Type="System.Int32" DbType="Int" CanBeNull="true" />
       <Column Name="pbe_work" Member="Pbe_work" Type="System.String" DbType="Char(32)" CanBeNull="true" />
      </Type>
     </Table>
    </Database>
    

    ter sua entidade criada com os nomes identicos aos da coluna da tabela(a não ser que você altere no mapeamento)

      /// <summary>
      /// Classe exemplo, não está completa
      /// </summary>
      public class Pbcatedt
      {
        public string Pbe_name { get; set; }
        public string Pbe_edit { get; set; }
        public string Pbe_type { get; set; }
      }
    }
    

    e na hora da utilização, você irá informar aonde está o arquivo de mapeamento:

        SqlConnection conn = new SqlConnection("STRINGDECONEXAO");
        conn.Open();
        System.Data.Linq.Mapping.XmlMappingSource xmlMapping = System.Data.Linq.Mapping.XmlMappingSource.FromXml("mapeamento.xml");
        var db = new System.Data.Linq.DataContext(conn, xmlMapping);//Aqui informa o mapeamento
        System.Data.Linq.Table<Pbcatedt> tablePbcatedt = db.GetTable<Pbcatedt>();
        var query = from c in tablePbcatedt
              select c;
        List<Pbcatedt> lst = query.ToList();
        
        //Para inserir
        Pbcatedt novoPbcatedt = new Pbcatedt
        {
          Pbe_name = "Exemplo",
          Pbe_edit = "Exemplo",
          Pbe_type = "exemplo"
        };
        tablePbcatedt.Attach(novoPbcatedt);//Attacha um novo objeto do tipo da entidade
        db.SubmitChanges();//Salva as mudanças
    
    você ainda tem a opção de não usar o mapeamento XML, mas sim diretamente na classe atraves do namespace System.Data.Linq.Mapping;
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data.Linq.Mapping;
    
      /// <summary>
      /// Classe exemplo, não está completa
      /// </summary>
      [Table(Name="dbo.Pbcatedt")]//Nome da tabela
      public class Pbcatedt
      {
        [Column(Name="Pbe_name")]
        public string Pbe_name { get; set; }
        [Column(Name = "Pbe_edit")]
        public string Pbe_edit { get; set; }
        [Column(Name = "Pbe_type")]
        public string Pbe_type { get; set; }
      }
    

    e utliza-lo sem informar o mapemaento xml

        //Consulta
        SqlConnection conn = new SqlConnection("STRINGDECONEXAO");
        conn.Open();
        var db = new System.Data.Linq.DataContext(conn);
        System.Data.Linq.Table<Pbcatedt> tablePbcatedt = db.GetTable<Pbcatedt>();
        var query = from c in tablePbcatedt
              select c;
        List<Pbcatedt> lst = query.ToList();
        
        //Para inserir
        Pbcatedt novoPbcatedt = new Pbcatedt
        {
          Pbe_name = "Exemplo",
          Pbe_edit = "Exemplo",
          Pbe_type = "exemplo"
        };
        tablePbcatedt.Attach(novoPbcatedt);//Attacha um novo objeto do tipo da entidade
        db.SubmitChanges();//Salva as mudanças
    


    Olavo Oliveira Neto
    Se for útil marque como resposta e faça um Developer feliz :)
    sexta-feira, 14 de janeiro de 2011 11:51
    Moderador
  • Muito boa a Explicação!!! Pelo método sem o XML achei mais fácil e vou fazer testes.

    Tudo isso por que no dominio aqui da empresa o VS não deixa criar Objetos tipados, eu consigo criar o arquivo DBML, mas na hora de criar a conexão pelo Server Explorer ele não deixa.

    Valeu!!!

    sexta-feira, 14 de janeiro de 2011 12:09
  • o XML é mais fácil por que você pode gerar ele autoamticamente, lá no promt do Visual Studio Command Prompt (2010) você digita SQLMETAL /server:SERVIDOR /database:NOMEDOBANCO > nomedoarquivo.XML e ele irá salvar o arquivo. você abre, apaga as duas primeiras linhas e pronto!!!
    Olavo Oliveira Neto
    Se for útil marque como resposta e faça um Developer feliz :)
    sexta-feira, 14 de janeiro de 2011 12:18
    Moderador
  • Muito bom o tutorial. Parabéns pela explicação.
    terça-feira, 20 de setembro de 2011 12:49