none
Mapear Tabela RRS feed

Respostas

  • J. antunes,

    1. Crie uma classe chamada JAntunes.cs , ou o nome que você quiser e insira esse codigo ai, nao esqueça de alterar a string de conexão. Esse codigo eu testei e deu certo.

    Code Snippet

     

    //Nao pode esquecer de fazer referencia as NameSpaces necessarios,

    //Para cria‡Æo do modelo.

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    using System.Data.Linq;

    using System.Data.Linq.Mapping;

    using System.Data;

    using System.Reflection;

    using System.Linq.Expressions;

    using System.ComponentModel;

    //Defini o espa‡o de nomes

    namespace JAntunes

    {

    [System.Data.Linq.Mapping.DatabaseAttribute(Name = "NORTHWND")] //Define o nome do bd

    partial class JAntunesORMDataContext : System.Data.Linq.DataContext //Defini a classe

    {

    //Define uma variavel estatica para mapeamento de origem

    private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();

     

    #region Extensibility Method Definitions

    partial void OnCreated();

    partial void InsertOrder(Pedido instance);

    partial void UpdateOrder(Pedido instance);

    partial void DeleteOrder(Pedido instance);

    #endregion

    //Vamos definir um construtor

    public JAntunesORMDataContext() :

    //Passa a string de conexao para para a classe base realizar o mapeamento

    //Seguinte eu criei no App

    //Vamos definir aqui a string de conexao protegida, fa‡a da maneira que vocˆ achar melhor

    //Altere conforme a necessidade

    base("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\SQL Server 2000 Sample Databases\\NORTHWND.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True", mappingSource)

    {

    OnCreated();

    }

    public JAntunesORMDataContext(string connection) :

    base(connection, mappingSource)

    {

    OnCreated();

    }

    public JAntunesORMDataContext(System.Data.IDbConnection connection) :

    base(connection, mappingSource)

    {

    OnCreated();

    }

    public JAntunesORMDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) :

    base(connection, mappingSource)

    {

    OnCreated();

    }

    public JAntunesORMDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) :

    base(connection, mappingSource)

    {

    OnCreated();

    }

    public System.Data.Linq.Table<Pedido> Orders

    {

    get

    {

     

    return this.GetTable<Pedido>();

    }

    }

     

     

    }

    [Table(Name = "Orders")]

    public class Pedido

    {

    //Aqui JAntunes Definimos a Classe Pedidos, ou seja mapeamos cada campo da tabela

    //Pedidos

    //Vamos definir os Campos de cada propriedade

    //Aqui definimos os Fields de cada propertie

    private int _OrderID;

    private string _ShipCountry;

    //De maneira simples criamos a propriedade que corresponde a coluna

    [Column(Storage = "_OrderID", AutoSync = AutoSync.OnInsert, DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)]

    public int OrderID

    {

    get

    {

    return this._OrderID;

    }

    set

    {

    if ((this._OrderID != value))

    {

    //this.OnOrderIDChanging(value);

    //this.SendPropertyChanging();

    this._OrderID = value;

    //this.SendPropertyChanged("OrderID");

    // this.OnOrderIDChanged();

    }

    }

     

    }

    [Column(Storage = "_ShipCountry", DbType = "NVarChar(15)")]

    public string ShipCountry

    {

    get

    {

    return this._ShipCountry;

    }

    set

    {

    if ((this._ShipCountry != value))

    {

    // this.OnShipCountryChanging(value);

    //this.SendPropertyChanging();

    this._ShipCountry = value;

    //this.SendPropertyChanged("ShipCountry");

    // this.OnShipCountryChanged();

    }

    }

    }

    }

    }

     

     

    2. Agora crie um Windows Forms, coloque um BindingSource e um DataGridview, e cole esse codigo, e rode o aplicativo.

     

    No evento LOAD do form insira esse codigo:

     

     

    Code Snippet

    JAntunes.JAntunesORMDataContext db = new JAntunes.JAntunesORMDataContext();

    var ord = from o in db.Orders

    select o;

    this.dataGridView1.DataSource = ord.ToList();

     

     

    Funcionou blz, os dois campos que foram mapeados, apareceram no datagridview, o Codigo do pedido, e o Pais..

     

    J. Antunes e muito simples, prá você aprofundar na criação manual do modelo OR, você pode criar um usando assintente e estudar o codigo fonte .desingner.cs, que fica no projeto dbml, não tem segredo. Esse mapeamento ai foi retirado uma serie de coisas, eu tirei, delegates, eventos..e etc..

     

    Qualquer duvida me avise,

    Ou se quiser me mande uma email, que eu devolvo pra você com o projeto que fiz no c# 2008 express edition.

     

     

    Atenciosamente

    Fidencio

     

    segunda-feira, 21 de julho de 2008 22:39

Todas as Respostas

  • J. Antunes,

     

     Aqui tem algumas webcasts, que ensina, da uma olhada.

    http://www.msdnbrasil.com/mediacenter

     

    Tem outro artigo aqui tambem que ensina, so que em VB.NET, dai é moleza prá você converter. em C#

    http://www.macoratti.net/08/04/net_plnq.htm

    sábado, 19 de julho de 2008 21:48
  • Olá, suas informações foram valiosas. Testei o programa do Macoratti e em Vb funcionou belezinha. Agora em C#(com outra tabela) dá o seguinte erro:

    Não foi possível especificar uma implementação do padrão de consulta para o tipo de origem 'System.Data.Linq.Table'. 'Select' não encontrado. Uma referência a 'System.Core.dll' ou diretiva de uso para 'System.Linq' está faltando?

     

    Veja o meu código e o que pode estar errado:

     

    Code Snippet

    string strConexao = @"Data Source=Financeiro\SQLEXPRESS;Initial Catalog=TESTE;Integrated Security=TRUE";

    DataContext contexto = new DataContext(strConexao);

    Table<csProjeto.csTeste> detalhes = contexto.GetTable<csProjeto.csTeste>();

    var exibe = from p in detalhes --> O erro é aqui

    select p;

     

     

    O mapeamento eu fiz assim:

     

    Code Snippet

    public class csProjeto

    {

    [Table(Name="Teste")]

    public class csTeste {

    [Column()]

    public int OrderID;

    [Column()]

    public string Nome;

    }

    }

     

    Obrigado

    segunda-feira, 21 de julho de 2008 17:52
  • J. antunes,

    1. Crie uma classe chamada JAntunes.cs , ou o nome que você quiser e insira esse codigo ai, nao esqueça de alterar a string de conexão. Esse codigo eu testei e deu certo.

    Code Snippet

     

    //Nao pode esquecer de fazer referencia as NameSpaces necessarios,

    //Para cria‡Æo do modelo.

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    using System.Data.Linq;

    using System.Data.Linq.Mapping;

    using System.Data;

    using System.Reflection;

    using System.Linq.Expressions;

    using System.ComponentModel;

    //Defini o espa‡o de nomes

    namespace JAntunes

    {

    [System.Data.Linq.Mapping.DatabaseAttribute(Name = "NORTHWND")] //Define o nome do bd

    partial class JAntunesORMDataContext : System.Data.Linq.DataContext //Defini a classe

    {

    //Define uma variavel estatica para mapeamento de origem

    private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();

     

    #region Extensibility Method Definitions

    partial void OnCreated();

    partial void InsertOrder(Pedido instance);

    partial void UpdateOrder(Pedido instance);

    partial void DeleteOrder(Pedido instance);

    #endregion

    //Vamos definir um construtor

    public JAntunesORMDataContext() :

    //Passa a string de conexao para para a classe base realizar o mapeamento

    //Seguinte eu criei no App

    //Vamos definir aqui a string de conexao protegida, fa‡a da maneira que vocˆ achar melhor

    //Altere conforme a necessidade

    base("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\SQL Server 2000 Sample Databases\\NORTHWND.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True", mappingSource)

    {

    OnCreated();

    }

    public JAntunesORMDataContext(string connection) :

    base(connection, mappingSource)

    {

    OnCreated();

    }

    public JAntunesORMDataContext(System.Data.IDbConnection connection) :

    base(connection, mappingSource)

    {

    OnCreated();

    }

    public JAntunesORMDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) :

    base(connection, mappingSource)

    {

    OnCreated();

    }

    public JAntunesORMDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) :

    base(connection, mappingSource)

    {

    OnCreated();

    }

    public System.Data.Linq.Table<Pedido> Orders

    {

    get

    {

     

    return this.GetTable<Pedido>();

    }

    }

     

     

    }

    [Table(Name = "Orders")]

    public class Pedido

    {

    //Aqui JAntunes Definimos a Classe Pedidos, ou seja mapeamos cada campo da tabela

    //Pedidos

    //Vamos definir os Campos de cada propriedade

    //Aqui definimos os Fields de cada propertie

    private int _OrderID;

    private string _ShipCountry;

    //De maneira simples criamos a propriedade que corresponde a coluna

    [Column(Storage = "_OrderID", AutoSync = AutoSync.OnInsert, DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)]

    public int OrderID

    {

    get

    {

    return this._OrderID;

    }

    set

    {

    if ((this._OrderID != value))

    {

    //this.OnOrderIDChanging(value);

    //this.SendPropertyChanging();

    this._OrderID = value;

    //this.SendPropertyChanged("OrderID");

    // this.OnOrderIDChanged();

    }

    }

     

    }

    [Column(Storage = "_ShipCountry", DbType = "NVarChar(15)")]

    public string ShipCountry

    {

    get

    {

    return this._ShipCountry;

    }

    set

    {

    if ((this._ShipCountry != value))

    {

    // this.OnShipCountryChanging(value);

    //this.SendPropertyChanging();

    this._ShipCountry = value;

    //this.SendPropertyChanged("ShipCountry");

    // this.OnShipCountryChanged();

    }

    }

    }

    }

    }

     

     

    2. Agora crie um Windows Forms, coloque um BindingSource e um DataGridview, e cole esse codigo, e rode o aplicativo.

     

    No evento LOAD do form insira esse codigo:

     

     

    Code Snippet

    JAntunes.JAntunesORMDataContext db = new JAntunes.JAntunesORMDataContext();

    var ord = from o in db.Orders

    select o;

    this.dataGridView1.DataSource = ord.ToList();

     

     

    Funcionou blz, os dois campos que foram mapeados, apareceram no datagridview, o Codigo do pedido, e o Pais..

     

    J. Antunes e muito simples, prá você aprofundar na criação manual do modelo OR, você pode criar um usando assintente e estudar o codigo fonte .desingner.cs, que fica no projeto dbml, não tem segredo. Esse mapeamento ai foi retirado uma serie de coisas, eu tirei, delegates, eventos..e etc..

     

    Qualquer duvida me avise,

    Ou se quiser me mande uma email, que eu devolvo pra você com o projeto que fiz no c# 2008 express edition.

     

     

    Atenciosamente

    Fidencio

     

    segunda-feira, 21 de julho de 2008 22:39
  • Valeu, obrigado pela força.

    quarta-feira, 23 de julho de 2008 21:02