Links mvc & EF codefirst

Segue abaixo alguns links para apoio no desenvolvimento de aplicações utilizando MVC & EF Codefirst

http://www.entityframeworktutorial.net/
http://msdn.microsoft.com/pt-br/library/hh972463.aspx
http://msdn.microsoft.com/en-us/data/jj574232.aspx
http://blogs.msdn.com/b/webdev/archive/2013/11/01/tutorial-series-updated-for-entity-framework-6-code-first-with-mvc-5.aspx
http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc
http://weblogs.asp.net/manavi/archive/2011/03/27/associations-in-ef-4-1-code-first-part-1-introduction-and-basic-concepts.aspx
http://weblogs.asp.net/ricardoperes/archive/2013/04/29/entity-framework-code-first-relations.aspx
http://www.asp.net/mvc/tutorials/mvc-5
http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application
http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-a-more-complex-data-model-for-an-asp-net-mvc-application
http://weblogs.asp.net/shijuvarghese/archive/2013/03/03/generating-entity-data-model-diagram-from-ef-code-first-dbcontext.aspx
http://codefirst.codeplex.com/
http://efmvc.codeplex.com/
http://imasters.com.br/linguagens/asp/asp-net-mvc-realizando-a-paginacao-de-dados/

sempre atualizando…

Select com Linq em DataTable

Segue abaixo um pequeno exemplo de como fazer um select com Linq em um DataTable, é bem simples.

DateTime dtMax = Convert.ToDateTime(((
   from DataRow dr in dt.Rows
orderby Convert.ToDateTime(dr["Posting Date"]) descending
 select dr).FirstOrDefault()["Posting Date"]));

Update com Join

Para atualizar registros de uma tabela com dados que estão em uma tabela diferente podemos utilizar UPDATE com JOIN, como vou demostrar a seguir.

No exemplo a coluna [descricaoProfissao] da tabela [Pessoa] e atualizada com o conteúdo da coluna [descricao] que esta a tabela [Profissao], para isso temos que fazer um JOIN utilizando a PK e FK [idProfissao]. Os campos que eu posso atualizar neste caso são somente os correspondentes ao alias [Pes] da tabela [Pessoa] , pois é o que esta indicado depois da palavra [UPDATE] que identifica o que será atualizado.

-- Select 1
SELECT idProfissao , -- PK
       descricao
  FROM Profissao

-- Select 2
SELECT idPessoa , -- PK
       idProfissao , -- FK
       nome ,
       descricaoProfissao
  FROM Pessoa

-- Update com JOIN
UPDATE Pes
   SET Pes.descricaoProfissao = Pro.descricao ,
       Pes.nome = Pes.nome + ' - ' + Pro.descricao
  FROM Pessoa AS Pes
  LEFT JOIN Profissao AS Pro ON Pro.idProfissao = Pes.idProfissao
 WHERE Pes.idPessoa = 999

O exemplo e simples e ilustrativo, mas pode ajudar.

Classes anônimas

As vezes precisamos criar classes temporárias sem precisar adicionar no projeto pois não vamos utiliza-las mais tarde, podemos cria-las dinamicamente no código, é simples, veja a seguir:

As propriedades serão sempre publicas e seus valores poderão ser alterados.

 

Padrões de projeto – SOLID

Em arquitetura de software devemos seguir alguns padrões para que nossos projetos possam crescer de forma segura, facilitando a manutenção do código e expansão do projeto. A seguir vou demonstrar um conceito muito conhecido de cinco princípios que devem ser seguidos para que o seu projeto tenha um nível alto de entendimento.

S O L I D

Single Responsability Principle – SRP (Responsabilidade única): Parte do principio que uma classe ou método deve ter uma única responsabilidade. Deve ter apenas uma razão para mudar.

Open Closed Principle – OCP (Aberto fechado): Uma classe deve sempre estar aberta para EXTENÇÃO e fechada para MODIFICAÇÃO.

Liskov Substitution Principle – LSP (Substituição Liskov): Deve ser possível substituir uma classe base por suas classes derivadas em quanquer ponto do código.

Interface Segregation Principle – ISP (Segregação de  interface): Clientes não devem ser obrigados a depender de interfaces que eles não utilizam. Muitas interfaces de um cliente especifico é melhor do que uma interface de uso geral.

Dependecy Inversion Principle – DIP (Inversão dependência): Módulos de alto nível não devem depender de módulos de baixo nível, ambos devem depender de abstrações. Abstrações não devem depender de detalhes, detalhes devem depender de abstrações, por exemplo, uma classe deve depender de uma interface ou classe abstrata e não de uma classe concreta.

Referenciando métodos server-side no HTML da pagina

Quando precisamos adicionar controles HTML na pagina, por exemplo, dentro de um componente asp .net podemos referenciar métodos server-side através de comandos java script, porem isso fica um pouco complicado para fazer “na mão”. O método apresentado a seguir captura os eventos de Postback, neste caso indica o(s) método(s) que serão usados na pagina de acordo com o parâmetro [eventArgument]:

        public void RaisePostBackEvent(string eventArgument)
        {
            switch (eventArgument)
            {
                case "MetodoTeste1":
                    MetodoTeste1();
                    break;
                case "MetodoTeste2":
                    MetodoTeste2();
                    break;
            }
        }
        protected void MetodoTeste1()
        {
            // escopo
        }

        protected void MetodoTeste2()
        {
            // escopo
        }

O método [Render] escreve o que sera desenhado (renderizado) no browser. Com a alteração (override) deste método é possível inserir mais controles na pagina HTML.  O código a seguir insere na pagina HTML dois links que executarão os métodos server-side [MetodoTeste1] e [MetodoTeste2] respectivamente de acordo com o que esta referenciado no método [RaisePostBackEvent].

        protected override void Render(HtmlTextWriter writer)
        {
            const string input = "<a onclick=\"{0};\">{1}</a>";

            writer.Write(input, Page.ClientScript.GetPostBackEventReference(this, "MetodoTeste1"), " Descrição MetodoTeste1 ");
            writer.Write(input, Page.ClientScript.GetPostBackEventReference(this, "MetodoTeste2"), " Descrição MetodoTeste2 ");

            base.Render(writer);
        }

Assim quando clicar no link [Descrição MetodoTeste1] o método [MetodoTeste1] sera executado no servidor.

Scripts que identificam tabelas sem Primary Key ou com Primary Key

-- Sem Primary Key:
USE siga_Main;
SELECT u.name, o.name
FROM sysobjects o
INNER JOIN sysusers u ON o.uid = u.uid
WHERE xtype = 'U' AND NOT EXISTS
(SELECT i.name FROM sysindexes i WHERE o.id = i.id AND (i.status & 2048)<>0)

-- Com Primary Key:

SELECT u.name, o.name, i.name
FROM sysobjects o
INNER JOIN sysindexes i ON o.id = i.id
INNER JOIN sysusers u ON o.uid = u.uid
WHERE (i.status & 2048)<>0