Inserir dados com LINQ ou Entity(Tanto faz)

.NET

09/01/2013

Nessa minha caminhada com C#, gostaria de inserir dados, alterar, mas sem estar usando aquela montueira de Insert's, poius isso quebra as regras da OO. Então resolvi aprender LINQ to SQL ou LINQ to Entity, porem em ambos os casos estou apanhando. Claro, comprei o Livro Visual Studio Passo a passo(Do John Sharp), mas chegou um ponto que ficou meio confuso. Recorri à net e a vocês. Quando eu uso a classe DataContext, consigo até passar uma conexão, porem não consigo, passar uma variável que está nas classes de entidade e assim dar um Submit nela. Se tento um Entity mais ou menos,rs, eu não consigo(não sei fazer) passar uma conexão. Vou tentar exemplificar, postando o código. Sei que tem coisa(s) errada(s) aí, só gostaria de uma direção de vocês. Usaundo a Classe de entidade com a variável MSE, não consigo passar uma conexão e nem dizer quem eu quero gravar(nesse caso a variável gestor que tem os dados a serem gravados)
public class InserirBD
{
ConexaoBD conexao = new ConexaoBD();

public void InserirGestor( string nm_gestor )
{
MedicalServiceDataContext db = new MedicalServiceDataContext(conexao.Conexao());
MedicalServiceEntities mse = new MedicalServiceEntities();
ObjectQuery<TB_GESTOR> tbgestor = mse.TB_GESTOR;

//var nomeGestor = from g in ms.TB_GESTOR
// select g.NOME_GESTOR;

TBGestor gestor = new TBGestor();
{
gestor.NOME_GESTOR = nm_gestor;
};

try
{
mse.SaveChanges();

//db.Gestor.InsertOnSubmit(gestor);
//db.SubmitChanges();
}
finally
{ }
}
Como eu resolvo esse problema? Chega um momento que trava tudo.


Pjava

Pjava

Curtidas 0

Respostas

Pjava

Pjava

09/01/2013

Resolvi assim, em um exemplo que eu peguei na net.

using(MedicalServiceEntities mse = new MedicalServiceEntities())
{
TB_GESTOR tg = new TB_GESTOR();
tg.NOME_GESTOR = nm_gestor;
mse.TB_GESTOR.AddObject(tg);
mse.SaveChanges();
}

Post resolvido. Podem fechar.
GOSTEI 0
Robson Alves

Robson Alves

09/01/2013

Primeiramente, a teoria de OO é linda e maravilhosa na teoria.
Segundo Linq To SQL é perfeito e considerado uma otima ferramenta, mas não tente utiliza-la em sistemas de médio/grande porte.. ele se torna limitado e não performático.
Terceiro não tenha medo de ousar, tente fazer sistemas com acesso ADO.Net e transações de dados via Procedure... Não vejo problema em utilizar, só não se prenda a ideologias... seja livre para usar o que achar melhor!


Sobre o seu problema, coloque um Catch no Try e pegue o erro, pois se trava, fica inconclusivo chegar em uma ideia para te ajudar!

Aguardo!
GOSTEI 0
Robson Alves

Robson Alves

09/01/2013

Too late for me :D

rsrs, mas leve em consideração minha opnião acima!
Abraços.
GOSTEI 0
Pjava

Pjava

09/01/2013

Com certeza, é o que eu estou fazendo. Colhendo o máximo possível informações.
GOSTEI 0
Pjava

Pjava

09/01/2013

Achei muito legal o Entity e eu só estou começando. Acabou aquele monte de Insert e etc... Dessa forma, eu escrevo uns 10 métodos ou mais em um único dia. A pior parte como sempre, é criar a Interface, tem sempre um pau no CSS, no HTML ou no alinhamento dos controles. Se não fosse isso, pesquisar, inserir ou qualquer outra coisa relativo a BD, é bem produtivo usando o Entity. Gostei. E o código fica extremamente limpo, sem aqueles Inserts e etc...
GOSTEI 0
Robson Alves

Robson Alves

09/01/2013

Concordo, fica muito intuitivo também, e toda ação fica encarregada por ele!
Bons Estudos
GOSTEI 0
Gabriel Simas

Gabriel Simas

09/01/2013

Resolvi assim, em um exemplo que eu peguei na net.

using(MedicalServiceEntities mse = new MedicalServiceEntities())
{
TB_GESTOR tg = new TB_GESTOR();
tg.NOME_GESTOR = nm_gestor;
mse.TB_GESTOR.AddObject(tg);
mse.SaveChanges();
}

Post resolvido. Podem fechar.


PJava, muito cuidado com este tipo de código com using para uma Classe de Conexão, ele mata a instância sempre que executa o trecho, caso você queria usar a mesma conexão para fazero CRUD, pode receber alguns erros inesperados depois que o seu sistema crescer. Ou seja, caso você esteja usando um Sistema onde as informações seja em apenas uma instância do Banco, você pode receber erros. Então, caso você precise gerar um CRUD faça da seguinte forma:

Uma melhor prática é você instanciar a Classe de conexão diretamente no construtor da Classe de Acesso a Dados (DAL)

public Class TB_GESTORDAL {

public TB_GESTORDAL(){
MedicalServiceEntities mse = new MedicalServiceEntities();
}

public salvaGestor(TB_GESTOR){

try {

mse.AddToTB_GESTOR(TB_GESTOR); //Insere
mse.SaveChanges(); //Grava no Banco (COMMIT)

}catch {
throw;
//Não precisa se preocupar em fechar a conexão, deixa isso com o EF.
}
}
}
GOSTEI 0
Gabriel Simas

Gabriel Simas

09/01/2013

Com certeza, é o que eu estou fazendo. Colhendo o máximo possível informações.


Lembrando que caso você use um Ambiente 100% Microsoft - IIS, Banco de Dados SQL Server, Visual Studio - você pode utilizar o EF de maneira estável e a aplicação ganha uma certa velocidade, posto que isso está documentado pela própria Microsoft na parte de Architecture... seria uma boa você baixar o Architecture Guide da Microsoft onde lá está descrito que é recomendado o uso do Entity Framework neste tipo de ambiente.

Abraços.
GOSTEI 0
José

José

09/01/2013

Como a duvida aparentemente foi sanada, estou dando o tópico por concluído.
GOSTEI 0
POSTAR