Jump to content
Flatdnl

LINQ to SQL - Vários INSERTs

Recommended Posts

Flatdnl

Bom Dia Galera,

Estou me aventurando no LINQ to SQL, estou achando muito interessante...

mas me deparei com um problema e ainda não consegui encontrar nenhuma solução...

tenho uma tabela de Nota Fiscal, e outra com os Itens da NF(produtos)...

preciso fazer um INSERT na table de NF e depois os INSERT dos itens...

Minha duvida é o seguinte, como faço para fazer esses INSERT e caso encontre algum erro no caminho ele da um Rollback...

ou fazer isso dentro de uma transaction onde só commita após estas tudo Ok...

preciso de uma luz com relação a isso...

estou utilizando a Linguagem VB.NET.

Desde já agradeço.

Abraços.

Share this post


Link to post
Share on other sites
Rechousa

Olá,

Sugiro que utilizes uma Stored Procedure em que um dos parâmetros é uma tabela (Table Valued Parameter ou TVP).

Dessa forma, dentro da tua SP irias ter apenas uma transacção em que inserias o registo na tabela de NF e, posteriormente, todos os registos na tabela Produtos da NF, produtos esses que viriam na tua TVP.

Caso ocorra algum erro e faças um rollback ambas as tabelas mantêm o estado.

Eu uso a mesma técnica, mas sem LINQ.

Exemplo:

http://blog.mikecouturier.com/2010/01/sql-2008-tvp-table-valued-parameters.html

EDIT:

Esqueci-me de referir que a TVP é uma funcionalidade do SQL Server 2008, não sendo suportado em versões anteriores.

Espero ter ajudado.


Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Share this post


Link to post
Share on other sites
Flatdnl

Olá Rechousa,

Obrigado pela resposta, pode ter certeza que ajudou sim, não conhecia esse método que voce me enviou...

Porém, encontrei diversas formas de fazer essa persistência, mas nenhuma utilizando o LINQ to SQL...

Sei que é possível de fazer isso pelo LINQ, ja ouvi falarem sobre TransactionScope e outras coisas, mas até o momento não achei a forma de implementa-los...

Gostaria de saber de que forma consigo fazer essa persistência pelo LINQ, ou até mesmo, alguma forma de trabalhar com o LINQ e Transactions ou algo do tipo.

Desde ja agradeço.

Share this post


Link to post
Share on other sites
jpaulino

Porque não usas Entity Framework? Com EF o método SaveChanges funciona como uma transacção e se alguma operação falhar é efectuado o rollback

http://msdn.microsoft.com/en-us/library/bb336792.aspx

"SaveChanges operates within a transaction. SaveChanges will roll back that transaction and throw an exception if any of the dirty ObjectStateEntry objects cannot be persisted. "

Share this post


Link to post
Share on other sites
Flatdnl

Obrigado jpaulino,

Vou dar uma olhada no EF qualquer duvida volto a postar.

Agradeço pela atenção!

Att,

Share this post


Link to post
Share on other sites
Flatdnl

Bom Dia Galera,

Obrigado pela ajuda...

Li sobre a descontinuidade do LINQ to SQL, ja estou estudando sobre o EF, mas li em alguns artigos que a performance do EF não é muito boa...

O ultimo sistema que fiz, utilizei o LINQ, e ficou muito rapido, ja o EF não posso dizer pois nunca usei.

Gostaria de saber de voces, que ja utilizaram os dois ORM, qual tem a melhor performance?

Desde ja agradeço.

Share this post


Link to post
Share on other sites
Caça

Eu tenho um modelo EF que neste momento está com mais de 200 tabelas e ainda não noto nenhuma quebra de performance, por isso deves usar e como já foi dito, veio para substituir o LINQ to SQL


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Flatdnl

Legal,

Obrigado Caça e aos demais membros...

Como disse, ja estou a estudar o EF...

Só queria tirar algumas duvidas com relação ao que andei lendo, e creio que não há mais duvidas(por enquanto).

Agradeço pela ajuda, e breve voltarei para aprender mais um pouquinho com voces.

Share this post


Link to post
Share on other sites
jpaulino

Se leres os comentário do artigo que te mostre, no meu blog, lês o seguinte:

Existe obviamente um custo pela utilização de um ORM, mas na maioria dos casos é minimo.

Excepto em casos especificos onde a informação é realmente grande e tem de ser tratada com grande velocidade, o EF pode ser muito bem utilizado.

Mas é testar e ver os resultados especificos para cada caso.

Recomendo a leitura deste artigo, disponível na MSDN: Performance Considerations (Entity Framework)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.