Usuário com melhor resposta
Mapear Tabela

Pergunta
-
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{
}
}
}
[
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 SnippetJAntunes.
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
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#
-
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 Snippetstring 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 Snippetpublic
class csProjeto {[
Table(Name="Teste")] public class csTeste {[
Column()] public int OrderID;[
Column()] public string Nome;}
}
Obrigado
-
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{
}
}
}
[
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 SnippetJAntunes.
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
-