Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

RSS iMasters

[Resolvido] ASP .NET MVC 3 - Definindo o Model com ADO .NET

Recommended Posts

O Model, ou Modelo, é uma das partes do padrão MVC, que significa Model-View-Control e tem sido usado desde os anos 70.

O padrão MVC implica que uma aplicação será dividida em pelo menos três partes:

  1. Models - Que contém ou representa os dados com os quais a aplicação vai tratar;
  2. Views - Que são usadas para renderizar e apresentar partes do Model como uma interface de usuário;
  3. Controllers - Que processa as solicitações do usuário, realiza operações no Model e seleciona as Views para apresentar ao usuário.

O Model é a definição do domínio de dados com o qual sua aplicação trabalha. Se sua aplicação for um sistema bancário, o modelo poderia representar tudo em um banco com o qual sua aplicação precisa lidar, como contas, limites de crédito, operações financeiras...

O Model também é responsável por preservar o estado e a consistência dos dados; no exemplo da aplicação bancária, ele controlaria a movimentação bancária de um cliente.

O Model contém as classes e os arquivos relacionados com a camada de dados da aplicação. É no model que implementamos a lógica de acesso aos dados de nossa aplicação MVC e definimos as suas regras de negócios.

 

Assim, o Model não trata com apresentação de dados ou processamento de requisições; essas responsabilidades pertencem ao View e ao Controller. O mundo MVC é assim: bem dividido quanto às suas responsabilidades.

A implementação ASP .NET do padrão MVC

No ASP .NET MVC, Controllers são classes geralmente derivadas de System.Web.Mvc.Controller. Cada método público em uma classe derivada de Controller é chamado de método de Action, que está associado com uma URL configurável através do sistema de roteamento ASP.NET.

Quando um pedido é enviado para a URL associada com um método Action, as declarações na classe Controller são executadas afim de realizar algumas operações no modelo de domínio e, em seguida, selecionar uma View para ser exibida ao cliente.

A figura a seguir mostra a interação existente entre o Model-View-Controller em uma aplicação ASP .NET MVC:

46937.gif

Então, se você pretende criar uma aplicação usando ASP .NET MVC, já sabe onde deve definir a sua lógica de acesso aos dados: no Model. Para ilustrar isso, vamos criar um exemplo prático de uma aplicação ASP .NET MVC e será no Model que vamos definir o acesso aos dados usando ADO .NET.

Definindo o Model com ADO .NET

No exemplo prático, eu vou utilizar o Visual Web Developer 2010 Express Edition, mas você pode usar também o Visual Studio 2010.

Como estamos tratando do Model, vamos trabalhar com o banco de dados SQL Server Northwind.mdf e nosso objetivo será exibir os dados - apenas alguns campos - da tabela Products.

Abra o Visual Web Developer e no menu File clique em New Project. Selecione a seguir a linguagem (perceba que podemos trabalhar com C# ou VB .NET) e o template ASP .NET MVC 3 Web Application, informando o nome Produtos_MVC e clicando no botão OK;

46939.gif

Na janela seguinte, nós vamos selecionar a opção Internet Application e o View Engine Razor, que é uma ao engine ASPX:

46941.gif

Será criada a estrutura da aplicação conforme a figura abaixo:

46942.gif

O ASP .NET MVC facilitou a nossa vida criando a estrutura padrão, que contém as pastas onde podemos definir o Model, o View e o Controller. Você não precisa seguir essa estrutura, mas, como estamos iniciando, é recomendável aproveitarmos o modelo criado.

Se executarmos o projeto, iremos obter a seguinte tela:

46944.gif

Isso ocorre porque temos o controlador HomeController com o seguinte código:

Public Class HomeController

Inherits System.Web.Mvc.Controller

 

Function Index() As ActionResult

ViewData("Message") = "Welcome to ASP.NET MVC!"

 

Return View()

End Function

 

Function About() As ActionResult

Return View()

End Function

End Class

Que chama a View Index.vbhtml abaixo:

Obs: A extensão .vbhtml do arquivo index refere-se a sintaxe Razor para VB .NET. Se tivéssemos usado a linguagem C#, a terminação seria .cshtml.

@Code

ViewData("Title") = "Home Page"

End Code

 

<h2>@ViewData("Message")</h2>

<p>

To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.

</p>

Lembre-se de que no ASP .NET MVC, quando você digita uma URL, você invoca métodos; e, ao iniciarmos a aplicação, o controlador executa uma ação que é o método Index() que chama a View Index.vbhtml para exibir a página ao usuário.

Bem, vou aproveitar a estrutura criada e alterar esse comportamento modificando o método Index() do controlador e a View Index.vbhtml e - o mais importante - definindo um Model de forma que eu possa acessar os dados da tabela Products do banco de dados Northwtind.mdf.

Definindo o Model

Clique com o botão direito sobre a pasta Models e selecione Add -> Class e informe o nome Produtos.vb para a classe que irá representar os produtos que iremos tratar.

A seguir, digite o código abaixo nesta classe:

Public Class Produtos

 

Public Property ProductId()

Public Property ProductName()

Public Property UnitPrice()

 

End Class

Vamos agora criar outra classe chamada ProdutosModel.vb, onde iremos definir a lógica de acesso ao banco de dados Northwind.mdf e à tabela Products.

Clique com o botão direito sobre a pasta Models e selecione Add -> Class e informe o nome ProdutosModel.vb e digite o código a seguir:

Imports System.Data.SqlClient

Imports System.Web.Configuration

 

Public Function getProdutos() As IList(Of Produtos)

 

Dim constr As String = WebConfigurationManager.ConnectionStrings("conexaoNorthwind").ConnectionString

Dim sqlstr As String = "Select ProductID, ProductName, UnitPrice from Products"

Dim sqldr As SqlDataReader = Nothing

Dim sqlcmd As SqlCommand = Nothing

Dim listaProdutos As List(Of Produtos) = Nothing

 

listaProdutos = New List(Of Produtos)

 

Using sqlcon As New SqlConnection(constr)

sqlcmd = New SqlCommand(sqlstr, sqlcon)

sqlcon.Open()

sqldr = sqlcmd.ExecuteReader(CommandBehavior.CloseConnection)

While (sqldr.Read)

Dim produto As Produtos = New Produtos()

produto.ProductId = sqldr.GetInt32(0)

produto.ProductName = sqldr.GetString(1).ToString

produto.UnitPrice = sqldr.GetDecimal(2)

listaProdutos.Add(produto)

End While

End Using

 

Return listaProdutos

 

End Function

 

End Class

A classe retorna uma lista de produtos.

Note que estamos usando o namespace System.Data.SqlClient para acessar as classes e provedores de conexão com o SQL Server e o namespace System.Web.Configuration, pois estamos usando a classe WebConfigurationManager para acessar a string de conexão armazenada no arquivo Web.Config.

Vamos, então, abrir o arquivo Web.Config e incluir a string de conexão usada para conexão como SQL Server - conforme mostrado abaixo:

 

.....

<connectionStrings>

<add name="conexaoNorthwind" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True" />

</connectionStrings>

......

A conexão será identificada pelo nome conexaoNorthwind.

Vamos agora definir o Controller e a chamada ao método getProdutos(), da classe ProdutosModel. Vou aproveitar o Controller HomeController, mas poderia ter criado um novo controller chamado ProdutosController.

Vamos alterar, então, o controller HomeController, conforme mostra código a seguir:

Imports System.Web.Mvc

Imports Produtos_MVC.ProdutosModel

Imports Produtos_MVC.Produtos

Public Class HomeController

Inherits System.Web.Mvc.Controller

 

Function Index() As ActionResult

 

Dim produtosDB As ProdutosModel = New ProdutosModel

Dim Model = produtosDB.getProdutos

Return View(Model)

 

End Function

 

Function About() As ActionResult

Return View()

End Function

End Class

O último passo é criar a View para exibir os dados. Para isso, clique com o botão direito do mouse sobre o código da ActionResult Index e na janela Add View defina os valores conforme a figura abaixo:

46945.gif

O arquivo Index.vbhtml será gerado e você deverá ajustá-lo para ter o código:

 

@ModelType IEnumerable(Of Produtos_MVC.Produtos)

 

@Code

ViewData("Title") = "Index"

Layout = "~/Views/Shared/_Layout.vbhtml"

End Code

<h2>Index</h2>

<table>

<tr>

<th></th>

</tr>

 

@For Each item In Model

Dim currentItem = item

@<tr>

<td>

@currentItem.ProductId | @currentItem.ProductName | @currentItem.UnitPrice

</td>

</tr>

Next

 

</table>

Executando o projeto MVC iremos obter as informações da tabela Products:

46947.gif

Este é um exemplo bem básico que mostra como definir o Model e obter informações sobre ele. Na sequência, mostrarei como definir o Model usando o Entity Framework.

Pegue o projeto completo aqui: Produtos_MVC.zip

 

http://imasters.com.br/artigo/24381/dotnet/asp-net-mvc-3--definindo-o-model-com-ado-net

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.