terça-feira, 16 de abril de 2024

Aprenda a Evitar Memory Leaks no .NET com Dispose e Blocos Using



Os memory leaks são como fantasmas assombrando os desenvolvedores de software. Eles podem se esconder silenciosamente em nossos códigos, consumindo recursos preciosos e prejudicando o desempenho do aplicativo. No ambiente .NET, a gestão de memória é parcialmente automatizada pelo coletor de lixo (garbage collector), mas mesmo assim, é responsabilidade do desenvolvedor garantir a liberação adequada de recursos não gerenciados. Felizmente, o .NET oferece algumas ferramentas poderosas para lidar com isso, como o método Dispose() e os blocos using.

O Que São Memory Leaks?

Um memory leak ocorre quando um programa aloca memória dinamicamente repetidamente, mas não libera essa memória quando não é mais necessária. Isso pode acontecer por várias razões, mas é especialmente comum quando trabalhamos com recursos não gerenciados, como arquivos, conexões de banco de dados e objetos COM.

A Importância do Método Dispose()

O método Dispose() é uma parte fundamental do padrão de design "Dispose pattern" no .NET. Ele é usado para liberar explicitamente os recursos não gerenciados usados por um objeto. Ao implementar a interface IDisposable e chamar o método Dispose(), os desenvolvedores podem garantir que os recursos sejam liberados assim que não forem mais necessários.

Usando Blocos Using para Garantir a Liberação de Recursos

Os blocos using no C# fornecem uma maneira conveniente de garantir que os objetos que implementam IDisposable sejam liberados corretamente, mesmo se ocorrerem exceções no código. Um bloco using garante que o método Dispose() seja chamado automaticamente quando o escopo do bloco é concluído.

 

Exemplo Prático

Vamos examinar um trecho de código e explorar como podemos melhorá-lo para garantir uma gestão mais robusta de recursos no ambiente .NET.



No código acima, estamos lidando com uma operação de leitura de dados de um banco SQLite e exibindo-os em um DataGridView. Pode ser que vocês já estejas  familiarizado com códificação parecida. No entanto, há alguns problemas de gestão de recursos que precisamos resolver:

1. Gestão de Conexão com o Banco de Dados

O objeto SQLiteConnection precisa ser aberto e fechado corretamente para evitar vazamentos de recursos. Vamos usar um bloco using para garantir que a conexão seja fechada automaticamente quando não for mais necessária.



2. Limpeza de Recursos em Caso de Exceção

Se ocorrer uma exceção durante a execução do código dentro do bloco using, precisamos garantir que os recursos sejam liberados corretamente. Vamos mover a definição do objeto DataTable para dentro do bloco using e usar o método Dispose() para liberar o leitor e o comando em caso de exceção.



Conclusão

Lidar com memory leaks no .NET é crucial para manter a estabilidade e o desempenho dos aplicativos. Utilizar corretamente o método Dispose() e os blocos using é uma prática recomendada para garantir a liberação adequada de recursos não gerenciados. Ao melhorar a gestão de recursos em nosso código, garantimos que ele seja mais robusto, eficiente e menos propenso a problemas como memory leaks. Utilizando blocos using para objetos que implementam IDisposable, lidamos adequadamente com a liberação de recursos. Ao seguir essas práticas, podemos criar aplicativos mais estáveis e de alta qualidade no ambiente .NET. Adotar essas práticas desde o início do desenvolvimento, os desenvolvedores podem evitar muitas dores de cabeça no futuro e garantir uma experiência de usuário mais suave.

  

terça-feira, 3 de outubro de 2023

Como Alterar a Senha do Super Administrador (sa) via Prompt?

O super administrador 'sa' é uma conta crucial em um servidor SQL Server, com privilégios elevados para a administração do banco de dados. No entanto, há momentos em que surge a necessidade de redefinir sua senha, seja devido a esquecimento ou para fins de segurança. Este artigo aborda como resolver esse problema, identifica a causa subjacente e fornece uma solução passo a passo usando o prompt de comando.

Problema:

Você se depara com uma situação em que precisa acessar o super administrador 'sa' em seu servidor SQL Server, mas não se lembra da senha. Isso pode acontecer devido a vários motivos, como esquecimento da senha ou herança de um sistema existente, onde a senha 'sa' não é conhecida. Sem acesso à conta 'sa', você não pode executar tarefas essenciais de administração de banco de dados.


Causa:

A causa raiz desse problema geralmente é o esquecimento da senha do usuário 'sa'. A conta 'sa' é altamente privilegiada e é recomendado que sua senha seja protegida com segurança. Portanto, quando essa senha é perdida ou esquecida, é necessário encontrar uma maneira de redefini-la.

Solução Passo a Passo:

Aqui estão os passos para resolver esse problema e alterar a senha do super administrador 'sa' usando o prompt de comando:


Passo 1: Abra o Prompt de Comando como Administrador:

Para começar, clique com o botão direito do mouse no ícone do Prompt de Comando e selecione "Executar como administrador". Certifique-se de ter privilégios administrativos no servidor SQL.


Passo 2: Navegue até a Pasta do SQL Server:

Use o comando `cd` para navegar até o diretório onde o utilitário `sqlcmd` está localizado. Normalmente, o caminho padrão é `C:\Program Files\Microsoft SQL Server\<Versão>\Tools\Binn`. Certifique-se de substituir `<Versão>` pela versão específica do SQL Server instalada no seu sistema.


Passo 3: Execute o Comando SQL para Alterar a Senha:

Digite o seguinte comando e pressione Enter para abrir o utilitário `sqlcmd`, conectando-se ao SQL Server usando a autenticação do Windows:



sqlcmd -S localhost -E


Agora, você deve estar conectado ao SQL Server.


Passo 4: Redefina a Senha do 'sa':

Use o seguinte comando SQL para alterar a senha do super administrador 'sa'. Substitua `<nova_senha>` pela senha desejada:



ALTER LOGIN sa WITH PASSWORD = '<nova_senha>';
GO


Após executar este comando, você verá uma mensagem indicando que a senha foi alterada com sucesso.


Passo 5: Feche o Utilitário SQL e o Prompt de Comando:

Digite QUIT no utilitário sqlcmd para sair dele. Em seguida, feche o Prompt de Comando.


Ao seguir este guia passo a passo, você pode resolver com sucesso o problema de alteração da senha do super administrador 'sa' via prompt de comando. Lembre-se de que o usuário 'sa' possui privilégios significativos, portanto, mantenha a nova senha segura e siga as melhores práticas de segurança para proteger seu servidor SQL contra ameaças.


Agora, com acesso restabelecido ao super administrador 'sa', você pode continuar a administrar e manter seu servidor SQL Server com confiança. Espera ter ajudado, se você tiver alguma dúvida ou precisar de assistência adicional, não hesite em entrar em contato.

sexta-feira, 30 de junho de 2023

Entendendo o Conceito de Multithreading e seus Desafios



O conceito de multithreading é fundamental para compreender como os processos são executados em um sistema operacional. Neste artigo, vamos explorar o significado de "thread" e "multithreading", discutir sua relevância para os programadores e abordar os benefícios e desafios associados a esse conceito.


O que são threads:

Uma thread, também conhecida como fio ou linha, é um componente de um processo capaz de executar determinadas tarefas. Pode ser considerada como um subsistema ou um subconjunto do processo. Esse conceito pode ser comparado aos famosos "textões" do Twitter, nos quais um conteúdo extenso é dividido em partes menores para facilitar a leitura e compreensão.


Contextualizando os microprocessadores:

No contexto dos microprocessadores, o termo "thread" refere-se à capacidade de encadeamento de instruções que podem ser executadas simultaneamente. Esse conceito é complexo, mas ao longo deste artigo, procuraremos torná-lo mais compreensível para os programadores.


A importância do multithreading para os programadores:

O multithreading desempenha um papel crucial na programação, e é essencial que os desenvolvedores compreendam seus fundamentos. Neste artigo, abordaremos por que os programadores precisam conhecer o multithreading e como ele pode melhorar a eficiência e a capacidade de resposta de seus programas.


Benefícios do multithreading:

O uso de threads oferece vantagens significativas, como uma maior capacidade de resposta, compartilhamento e utilização eficiente de recursos, além de economia de tempo no desenvolvimento e gerenciamento de programas. Exploraremos cada um desses benefícios em detalhes.


Desafios e problemas do multithreading:

No entanto, o multithreading também apresenta desafios. Um dos principais problemas é o cancelamento prematuro de uma thread, o que pode interferir no funcionamento correto de outras threads. Além disso, o compartilhamento de recursos entre threads pode levar a problemas de concorrência e sincronização. Discutiremos esses desafios e como os programadores podem lidar com eles.


Concorrência versus paralelismo:

É importante distinguir entre os conceitos de concorrência e paralelismo. A concorrência envolve lidar com várias tarefas ao mesmo tempo, enquanto o paralelismo refere-se à execução simultânea de várias tarefas. Explicaremos a diferença entre esses dois conceitos e como eles se relacionam com o multithreading.


Considerações finais:

Neste artigo, exploramos o conceito de multithreading, seu significado e importância para os programadores. Discutimos os benefícios e desafios associados a esse conceito, enfatizando a necessidade de compreender a concorrência, o compartilhamento de recursos e a sincronização entre threads. Ao dominar o multithreading, os programadores podem otimizar a eficiência de seus programas e melhorar a experiência do usuário.


Lembre-se de que o multithreading é uma área complexa, mas espero que essa postagem tenha proporcionado uma compreensão básica e um ponto de partida.


.

quarta-feira, 18 de maio de 2022

Como obter a PublicKeyToken de uma biblioteca ou assembly?



Olá pessoal, hoje quero te ajudar a encontrar a PublicKeyToken ou Token de Chave Pública de um aplicativo, assembly ou dll através da linha de comando do power shall.

Mas antes disso vamos definir o que é uma PublickKeyToken.

O que é PublicKeyToken?

PublickKeyToken ou token de chave pública é um hash de 64 bits da chave pública que corresponde à chave privada usada para assinar o assembly. Ele é usado para tornar um nome de assembly único.
Por exemplo, temos dois assemblies fortemente nomeados com os mesmos nomes de arquivos, o .NET os tratará como assemblies diferentes porque o token de cada é único.

Vamos a prática

Para obter a PublicKeyToken é muito simples, basta seguir os seguintes passos:

1- Pressione Windows + R e digita powershell em seguida clica em OK

2- Assim que abrir o powerShell, escreva a expressão abaixo:

([system.reflection.assembly]::loadfile("C:\projects\demo20\Intelligencia.UrlRewriter.dll")).FullName

Dentro da função loadfile coloca o como parametro o caminho completo da tua dll.
E terás uma resultado parecido com esse:

Intelligencia.UrlRewriter, Version=2.0.0.9, Culture=neutral, PublicKeyToken=0573f3650687980d

















Bonús - Como obter a PublicKeyToken via código C#?

Dé uma olhada neste link, se tiveres alguma dúvida podes deixar nos comentários.
https://docs.microsoft.com/en-us/dotnet/api/system.applicationid?view=net-6.0


Espero ter ajudado, forte abraço!







segunda-feira, 5 de agosto de 2019

Entenda o DOM de uma vez por todas - 1 Introdução



Olá, este poste é o inicio de uma série de postes com um único objecto: "Te ajudar de uma vez por todas à entender o DOM usando javascript". Então bem-vindo a primeira parte:

Introdução ao DOM

O Document Object Model , geralmente chamado de DOM , é uma parte essencial para tornar os sites interativos. É uma interface que permite que uma linguagem de programação manipule o conteúdo, estrutura e estilo de um site. JavaScript é a linguagem de script do lado do cliente que se conecta ao DOM em um navegador da Internet.

Quase sempre que um site realiza uma ação, como alternar entre uma apresentação de slides de imagens, exibir um erro quando um usuário tenta enviar um formulário incompleto ou alternar um menu de navegação, ele é o resultado do JavaScript acessando e manipulando o DOM. Neste artigo, aprenderemos o que é o DOM, como trabalhar com o documentobjeto e a diferença entre o código-fonte HTML e o DOM.

Nota: Embora o DOM seja independente de idioma, ou criado para ser independente de uma linguagem de programação específica, ao longo deste recurso, nos concentraremos e nos referiremos à implementação do JavaScript do HTML DOM.


O que eu preciso?

Para entender efetivamente o DOM e como ele se relaciona com o trabalho com a Web, é necessário ter um conhecimento existente de HTML e CSS . Também é benéfico ter familiaridade com a sintaxe e a estrutura de código fundamentais do JavaScript.

O que é o DOM?

No nível mais básico, um site consiste em um documento HTML. O navegador que você usa para visualizar o site é um programa que interpreta HTML e CSS e renderiza o estilo, conteúdo e estrutura na página que você vê.

Além de analisar o estilo e a estrutura do HTML e do CSS, o navegador cria uma representação do documento conhecido como Document Object Model. Este modelo permite que o JavaScript acesse o conteúdo de texto e os elementos do documento do site como objetos.

JavaScript é uma linguagem interativa e é mais fácil entender novos conceitos fazendo. Vamos criar um site muito básico. Crie um index.htmlarquivo e salve-o em um novo diretório de projeto.
index.html
<!DOCTYPE html>
<html>
  <head>
    <title>Entendendo o DOM</title>
  </head>
  <body>
    <h1>Document Object Model (DOM)</h1>
  </body>
</html>
Esse código é o familiar código HTML de um novo esqueleto de site. Ele contém os aspectos mais essenciais de um documento de website - um doctype e uma htmltag com o heade bodyaninhados dentro.

Para nossos objetivos, usaremos o navegador Google Chrome, mas você poderá receber resultados semelhantes de outros navegadores modernos. No Chrome, abra-se index.html. Você verá um site simples com nosso título dizendo "Document Object Model (DOM)". Clique com o botão direito em qualquer lugar da página e selecione "Inspecionar". Isso abrirá as Ferramentas do desenvolvedor.
Na guia Elements , você verá o DOM.



Nesse caso, quando expandido, parece exatamente o mesmo que o código-fonte HTML que acabamos de escrever - um tipo de documento e as poucas outras tags HTML que adicionamos. Passar o mouse sobre cada elemento destacará o respectivo elemento no site renderizado. Pequenas setas à esquerda dos elementos HTML permitem alternar a exibição de elementos aninhados.

O document object

O document oject é um objeto interno que possui muitas propriedades e métodos que podemos usar para acessar e modificar sites. Para entender como trabalhar com o DOM, você deve entender como os objetos funcionam em JavaScript.

Em Developer Tools no index.html , vá para a guia Console . Digite document no console e pressione ENTER. Você verá que o resultado é o mesmo que você vê na guia Elements.

> document;
Saída
#document
<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Entendendo o DOM</title>
  </head>
  <body>
    <h1>Document Object Model (DOM)</h1>
  </body>
</html>


Digitar document e trabalhar diretamente no console não é algo que você geralmente fará fora da depuração, mas ajuda a solidificar exatamente o que o document object é e como modificá-lo, como descobriremos a seguir.

Qual é a diferença entre o código-fonte DOM e HTML?

Atualmente, com este exemplo, parece que o código-fonte HTML e o DOM são exatamente a mesma coisa. Existem duas instâncias em que o DOM gerado pelo navegador será diferente do código-fonte HTML:
  • O DOM é modificado pelo JavaScript do lado do cliente
  • O navegador corrige automaticamente erros no código-fonte
Vamos demonstrar como o DOM pode ser modificado pelo JavaScript do lado do cliente. Digite o seguinte no console:
document.body;

O console responderá com esta saída:
Saída
<body>
  <h1>Document Object Model (DOM)</h1>
</body>


Document é um objeto, body é uma propriedade desse objeto que acessamos com notação de ponto. O envio document.body para o console gera o elemento body e tudo dentro dele.

No console, podemos alterar algumas das propriedades ativas do objeto body neste site. Vamos editar o atributo style, mudando a cor de fundo para blue. Digite isso no console:
document.body.style.backgroundColor = 'blue';


Depois de digitar e enviar o código acima, você verá a atualização ao vivo para o site, conforme a cor do plano de fundo é alterada.
Alternando para a guia Elements ou digitando document.body no console novamente, você verá que o DOM foi alterado.

Saída
<body style="background-color: blue;">
  <h1>Document Object Model (DOM)</h1>
</body>


Nota: Para alterar a propriedade background-color CSS, tivemos que digitar o JavaScript backgroundColor. Qualquer propriedade CSS hifenizada será escrita em camelCase em JavaScript


O código JavaScript que digitamos, atribuindo à cor azul como fundo do body, é agora uma parte do DOM.

No entanto, clique com o botão direito do mouse na página e selecione "Ver fonte da página". Você notará que a fonte do site não contém o novo atributo de estilo que adicionamos via JavaScript. O código-fonte ou de origem de um site não será alterada e nunca será afetada pelo JavaScript do lado do cliente. Se você atualizar a página, o novo código que adicionamos no console desaparecerá.

A outra instância em que o DOM pode ter uma saída diferente do código-fonte HTML é quando há erros no código-fonte. Um exemplo comum disso é a tag table – uma tag tbody é necessária dentro de um table, mas os desenvolvedores geralmente não a incluem em seu HTML. O navegador corrigirá automaticamente o erro e adicionará o tbody, modificando o DOM. O DOM também corrigirá tags que não foram fechadas.

O que aprendemos?

Nesta parte, definimos o DOM, acessamos o objeto document, usamos JavaScript e o console para atualizar uma propriedade do objeto document e examinamos a diferença entre o código-fonte HTML e o DOM.

No próximo artigo, revisaremos a terminologia HTML importante, aprenderemos sobre a árvore DOM, descobriremos o que são nós, aprenderemos sobre os tipos mais comuns de nós e começaremos a criar scripts interativos com JavaScript.
Fique atento ao proximo artigo desta série!
Forte abraço.

terça-feira, 2 de julho de 2019

Como ignorar a acentuação ao consultar dados no Sql Server?

Vou ser rápido. Mas esse problema ocorre porque a muitas vezes a colecção do Sql Server definida é a Accent Sensitive (AS), por isso ele procurará a expressão exacta, incluindo as acentos.

Solução


SELECT * FROM Produto WHERE Nome like '%pao%' COLLATE Latin1_general_CI_AI

Na consulta acima a expressão Latin1_general_CI_AIpode ser dividido nas seguintes partes:
  1. Latin1 - faz o servidor tratar strings usando charset latin 1, ou seja, o ascii.
  2. CI - especifica maiúsculas e minúsculas, portanto, "ABC" é igual a "abc".
  3. AI - especifica insensível à acentuação, então "ãó" é igual a "ao".
Espero ter ajudado, forte abraço.


quinta-feira, 30 de maio de 2019

Como humanizar o formato dos DateTime em C#


Datas humanizadas são mais fáceis de ler. Eles estão bem formatados. Podemos mostrar "1 hora atrás" ou "1 minuto atrás", em vez do formato padrão, confuso. Hoje quero apresentar apenas um algoritmos que nos ajudarás a obter esse resultado em c#.

O Algoritmo


public static string GetDataHumanizada(DateTime d)
        {

            // Obtém o intervalo de tempo decorrido até a data actual.
            TimeSpan s = DateTime.Now.Subtract(d);

            int diasTotal = (int)s.TotalDays;
            int segundosTotal = (int)s.TotalSeconds;

            // Se o total de dias for superior à 31 dias ou inferior a zero
            // retornamos a data inserida no argumento.
            if (diasTotal < 0 || diasTotal >= 31)
            {
                return d.ToShortDateString();
            }

            if (diasTotal == 0)
            {
                // Menor que 1 minuto
                if (segundosTotal < 60)
                {
                    return "Agora mesmo";
                }
                // Menor que 2 minutos
                if (segundosTotal < 120)
                {
                    return "1 minuto atrás";
                }
                // Menor que 1 hora
                if (segundosTotal < 3600)
                {
                    return string.Format("{0} minutos atrás",
                        Math.Floor((double)segundosTotal / 60));
                }
                // Menor que 2 horas
                if (segundosTotal < 7200)
                {
                    return "1 hora atrás";
                }
                // Menor que 1 dia
                if (segundosTotal < 86400)
                {
                    return string.Format("{0} horas atrás",
                        Math.Floor((double )segundosTotal / 3600));
                }
            }
            // Completou um dia
            if (diasTotal == 1)
            {
                return "Ontem";
            }
            // Menor que 1 semana
            if (diasTotal < 7)
            {
                return string.Format("{0} dias atrás",
                    diasTotal);
            }
            // Menos que 1 mês
            if (diasTotal < 31)
            {
                return string.Format("{0} semanas atrás",
                    Math.Ceiling((double)diasTotal / 7));
            }
            return null;
        }

Como usar?


Deixa-me dar um exemplo rápido de como usar:

    static void Main()
    {

    DateTime dataPublicacao = new DateTime(2019, 5, 30,21,15,36);
     //Data de Publicacao é: 30/05/2019 21:15:36
        
        Console.WriteLine(GetDataHumanizada(dataPublicacao));
        Console.ReadKey();

        // Resultado: 4 minutos atrás  
        // Onde dada do sistema é: 30/05/2019 21:15:32        
    }

Conforme o nosso algoritmo está podemos humanizar a data apenas até semanas. Se queres um desafio, altere-o até meses ou mesmo até anos. Espero ter ajudado.
Um forte abraço.

quinta-feira, 25 de abril de 2019

Como gerar sequências numéricas em SQL numa consulta ou select?

Sem muitas voltas, te digo: Use a função Row_Number() do Sql Server.
Confira no exemplo a seguir.

Select Row_Number() Over(Order By idAluno) as Ordem, idAluno, NomeAluno
From Aluno
Where idTurma = 2

Resultado:



Isso é tudo, apenas olhe para essa instrução como um modelo para o que realmente desejas, ou comente o para eu te ajudar.

quinta-feira, 11 de abril de 2019

Porque Sql Server está consumindo muita memória? [Resolvido]

Porque o Sql Server está consumindo muita memória?

O problema começa quando instalamos o Sql Server. Ao instalarmos o Sql, normalmente, deixamos as definições padrães da memória mínima e máxima, que varia entre 0MB até 2147483647MB (2 petabytes). Ou seja, ele vai consumir toda memória do teu servidor deixando apenas 5MB livre para rodar outros serviços.

A Solução é limitar a memória máxima do Sql Server.

Neste exemplo vamos limitar a memória máxima para apenas 6144MB que equivale à 6GB.

Primeiramente, entre no Sql Server com um utilizador com permissão administrativa. Sendo assim basta seguir os seguintes passos:

limite memoria do SQL Server by Ayrton Yagami


  1. Clique com o botão direito no servidor conectado;
  2. Em seguida, clique em Properties (Propriedades);
  3. Selecione a aba Memory (Memória);
  4. Edite o campo Maximum Server Memory (Memória máxima do servidor). No nosso exemplo, queremos que o Sql Server consuma apenas 6GB;
  5. Clique em Ok para confirmar as alteração.
Pronto! Mas se for necessário reiniciar o Sql Server, o faça!

Bonus: Como limitar a memória do SqlServer via código?

Isso é simples! Copia e cola os seguintes comandos:

sp_configure 'max ser',6144
reconfigure

Note que 6144 são os megabytes que equivale a 6GB.

Alguma dúvida? Deixe nos cometário. Espero ter ajudado. 

segunda-feira, 28 de janeiro de 2019

Como colocar mensagem no DataList quanto está Vazio (Empty) no asp.net?


Como colocar a mensagem no DataList quanto está Vazio ou Empty conforme se faz no GridView do Asp.net?

O GridView possui a propriedade EmptyDataText que serva para colocar a mensagem de erro ou "not find" mas infelizmente o DataList e o ListView não têm esse propriedade. Para resolver este problema siga a solução abaixo:

<asp:DataList ID="dlFunc" runat="server" RepeatColumns="4">
        <ItemStyle CssClass="CardSeparation" />
        <ItemTemplate>
            <%-- area para campos --%>
        </ItemTemplate>
        <FooterTemplate>
            <asp:Label Visible='<%#bool.Parse((dlFunc.Items.Count==0).ToString())%>'
                runat="server" ID="lblNoRecord" Text="Documento não encontrado!"></asp:Label>
        </FooterTemplate>
    </asp:DataList>

Isso está criando uma lable no rodapé de DataList e torná-lo visível somente se a contagem de registro DataList é 0.

<asp:Label Visible='<%#bool.Parse((dlFunc.Items.Count==0).ToString())%>'
                runat="server" ID="lblNoRecord" Text="Documento não encontrado!">

Espero ter te ajudado. Um forte abraço!

segunda-feira, 21 de janeiro de 2019

Entity Framework - Como listar tabela dinamicamente através do seu nome?




       public IQueryable GetMyTable(string tipo)
        {
            MyDbContext context = new  MyDbContext();
            Type type = Type.GetType($"teu_namespace.{tipo}");
            if (type != null)
                return context.Set(type).AsQueryable();
            return null;
        }

O segredo todo está no método Set. Muitas pessoas que encontram esse problema usaram esse método de maneira errada, colocando o  Set<Type>. Isso sempre gerá o erro: "is a type but used as a class".

Para evitar esse problema use o Set(string) é a melhor forma para dinamizar o teu código.

Pesquisar neste blogue

Com tecnologia do Blogger.

Páginas

Aprenda a Evitar Memory Leaks no .NET com Dispose e Blocos Using

Os memory leaks são como fantasmas assombrando os desenvolvedores de software. Eles podem se esconder silenciosamente em nossos códigos, con...