Existem duas formas de se fazer um bulk insert em C#
A forma com o SQL classico e a forma com o linq.
Nesse exemplo existe tbm a necessidade de se apagar os registros anteriores para se inserir registros novos.
Eu pessoalmente acredito que a forma de deleção com o linq poderia ser melhorada, ja que para se deletar diversos registros de uma unica vez, fica necessaria um select e um loop com delete de objeto por objeto de registro, enquanto no sql tradicional basta apenas um unico delete ficando o resto do processamento dele para o proprio banco de dados (se alguem souber de alguma forma melhor de se fazer isso sem o loop fique a vontade para dizer).
Como se ve nos codigos:
Com Linq:
int CodUsuario = Convert.ToInt32(Formulario["CodUsuario"]);
var Deleta = from ObjDeleta in BD.tblAlvo where ObjDeleta.CodUsuario == CodUsuario select ObjDeleta;
foreach (var del in Deleta)
{
BD.tblAlvo.DeleteObject(del);
}
BD.SaveChanges();
Com Sql normal
DB.ExecuteStoreCommand("delete from tblAlvo where CodUsuario= " + CodUsuario + "");
Já na inserção nao existe nenhuma grande novidade, exceto que com o linq me pareceu muito mais seguro devido as regras inseridas no entities, enquanto no sql normal a inserção fica vulneravel ao sql injection
Nesse sistema foi inserido um drag'n'drop na tela que o usuario tem acesso para modificar os direitos de acesso para usuarios, que altera um hiddem atraves de jquery, criando uma array Ex. 1,4,7,9,10
com Linq
int CodUsuario = Convert.ToInt32(Formulario["CodUsuario"]);
Array Menu = Formulario["MenuEspecial"].Split(',');
foreach (var item in Menu)
{
var Menus = new tblAlvo();
Menus.CodUsuario = CodUsuario;
Menus.Menu_Cod = Convert.ToInt32(item);
BD.tblAlvo.AddObject(Menus);
BD.SaveChanges();
}
com Sql Normal
int CodUsuario = Convert.ToInt32(Formulario["CodUsuario"]);
Array Menu = Formulario["MenuEspecial"].Split(',');
foreach (var item in Menu)
{
DB.ExecuteStoreCommand("insert into tblAlvo (CodUsuario, Menu_Cod (values "+CodUsuario+","+ item +");
}
Embora com menos codificação no modo SQL, o mesmo fica mais exposto a ataques de inserções maliciosas.
Espero ter ajudado
Ate mais...
Nenhum comentário:
Postar um comentário