Inserir dados com LINQ ou Entity(Tanto faz)

09/01/2013

0

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

Responder

Posts

09/01/2013

Pjava

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.
Responder

09/01/2013

Robson Alves

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!
Responder

09/01/2013

Robson Alves

Too late for me :D

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

09/01/2013

Pjava

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

09/01/2013

Pjava

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...
Responder

09/01/2013

Robson Alves

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

25/01/2013

Gabriel Simas

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.
}
}
}
Responder

25/01/2013

Gabriel Simas

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.
Responder

31/07/2013

José

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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar