Array
(
)

Camada de Acesso a Dados (DAL), Linq, Entity Framework, SQL

Anonymous
   - 02 dez 2008

Boas.

Estamos desenvolvendo um projeto utilizando C#, WPF, LINQ e Entity Framework. Dividimos o projeto em 3. Um projeto WPF com a interface, uma Class Library com o Entity Framework e uma Class Library com o acesso a dados (DAL) utilizando LINQ.

Pergunta: Estou certo em dividir o projeto em 3 projetos dessa maneira?

Eu tenho o seguinte código para abrir a conexão com a minha base de dados MS-SQL Server 2005:

private static SisWebClasses.siswebEntities dm = new SisWebClasses.siswebEntities();

Pergunta: Onde eu devo abrir essa conexão? Eu devo abri-la apenas no Projeto DAL? Como eu faço isso apenas uma vez enquanto a aplicação principal estiver rodando?

Ao executar o projeto, eu abro uma tela e exibo os dados num DataGrid da Xceed:

dgSetor.ItemsSource = SetorDAL.SetorSelecionarTotal();

E tenho o comando LINQ que retorna os Dados:

public static System.Linq.IQueryable SetorSelecionarTotal()
{
return (from c in dm.tbSetor
select new { c.IdSetor, c.Setor, c.Situacao });
}

Até aqui tudo ocorre bem. A seleção é realizada quantas vezes eu entrar e sair da tela sem erros. Quando vou salvar uma alteração no entanto ocorre o seguinte erro:

An error occurred while starting a transaction on the provider connection. See the inner exception for details.

{´New transaction is not allowed because there are other threads running in the session.´}

O método da Alteração:
public static void SetorAlterar(int prIdSelecionado, string prSetor, bool prSituacao)
{
tbSetorTabela = (from c in dm.tbSetor
where c.IdSetor == prIdSelecionado
select c).First();
tbSetorTabela.Setor = prSetor;
tbSetorTabela.Situacao = prSituacao;
dm.SaveChanges();
}

Alguém tem idéia de como resolvo tudo isso? rsrs

Obrigado desde já pela ajuda!

Leonardo.

Anonymous
   - 15 out 2009

Leonardo, eu tb estava com uma duvida parecida e achei a solução aqui mesmo num artigo http://www.devmedia.com.br/articles/viewcomp.asp?comp=9297, mas tive que comprar, Valeu a pena.

Abraços