Professional Documents
Culture Documents
Aula
21
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
Estrutura do projeto:
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
go
identity(1,1),
not null,
not null,
not null unique,
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
\Web.config.xml
ConnectionString
<connectionStrings>
<add
name="aula"
connectionString="Data Source=(LocalDB)\v11.0;
AttachDbFilename=C:\Users\Coti\Desktop\Aula_16.08.15\Aula19\
Projeto.Web\App_Data\Banco.mdf;Integrated Security=True"
/>
</connectionStrings>
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
namespace Projeto.DAL.Entity
{
public class Produto
{
public int IdProduto
public string Nome {
public decimal Preco
public string Foto {
}
}
{ get; set; }
get; set; }
{ get; set; }
get; set; }
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
NHibernate
Verso do framework Hibernate (Java) para .Net. Consiste de uma
ferramenta para acesso a bases de dados de diversas plataformas
(Oracle, SqlServer, MySql, PostGre, FireBird, DB2, etc...)
um framework ORM (Mapeamento Objeto Relacional) e pode ser
integrado facilmente ao ambiente .NET
Instalando o NHibernate
Manage NuGet Packages
C# WebDeveloper
Aula
21
virtual
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
namespace Projeto.DAL.Entity
{
public class Produto
{
public virtual int IdProduto
public virtual string Nome {
public virtual decimal Preco
public virtual string Foto {
}
}
{ get; set; }
get; set; }
{ get; set; }
get; set; }
No NHibernate, a bilbioteca para mapeamento das entidades chamase Fluent. Para que possamos mapear as classes de entidade,
deveremos criar para cada uma delas classes de mapeamento
Namespace:
using
using
using
using
FluentNHibernate.Mapping
System;
System.Collections.Generic;
System.Linq;
System.Text;
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
using System.Threading.Tasks;
using FluentNHibernate.Mapping; //ORM (Mapeamento)
using Projeto.DAL.Entity; //classes de entidade
namespace Projeto.DAL.Mapping
{
//Regra 1) Herdar de ClassMap e definir o tipo da entidade..
public class ProdutoMap : ClassMap<Produto>
{
//Regra 2) Definir um construtor e detalhar o mapeamento..
public ProdutoMap()
{
//Nome da tabela..
Table("Produto");
//Chave primria..
Id(p => p.IdProduto, "IdProduto").GeneratedBy.Identity();
//demais
Map(p =>
Map(p =>
Map(p =>
atributos..
p.Nome, "Nome").Length(50).Not.Nullable();
p.Preco, "Preco").Not.Nullable();
p.Foto, "Foto").Length(50).Not.Nullable().Unique();
}
}
}
ISessionFactory
Consiste de uma interface do NHibernate utilizada para gerar
conexes com uma base de dados. Devemos criar uma classe que
configure eprepare essa fbrica de conexes.
Por boa prtica, em NHibernate, a classe que ser responsvel por
gerar e configurar a ISessionFactory ser chamada de
HibernateUtil
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
using
using
using
using
using
using
using
using
using
using
using
using
Aula
21
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
NHibernate;
NHibernate.Cfg;
FluentNHibernate;
FluentNHibernate.Cfg;
FluentNHibernate.Cfg.Db;
System.Configuration;
Projeto.DAL.Mapping;
namespace Projeto.DAL.Util
{
//Classe para configurar e retornar a fbrica de conexes..
public class HibernateUtil
{
//Mtodo padro para gerar a ISessionFactory
//static -> mtodo que j ir ter espao de memria definido..
public static ISessionFactory GetSessionFactory()
{
try
{
return Fluently.Configure().Database(
MsSqlConfiguration.MsSql2008.ConnectionString(
ConfigurationManager.
ConnectionStrings["aula"].ConnectionString)).
Mappings(m => m.FluentMappings.
AddFromAssemblyOf<ProdutoMap>()).
BuildSessionFactory();
}
catch(Exception e)
{
throw new Exception("Erro ao gerar session factory: "
+ e.Message);
}
}
}
}
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
Generic DAL
Padro utilizado para definir uma camada de persistncia com
operaes genricas de CRUD para banco de dados.
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
NHibernate; //acesso a banco..
NHibernate.Linq; //consultas..
Projeto.DAL.Util; //HibernateUtil..
namespace Projeto.DAL.Generics
{
public abstract class GenericDal<T>
where T : class
{
//mtodo para inserir um registro na base de dados..
public void Insert(T obj)
{
using(ISession s = HibernateUtil.GetSessionFactory().OpenSession())
{
ITransaction t = s.BeginTransaction(); //iniciando transao..
s.Save(obj); //inserindo o registro..
t.Commit(); //executar a transao..
}
}
//mtodo para excluir um registro na base de dados..
public void Delete(T obj)
{
using (ISession s = HibernateUtil.GetSessionFactory().OpenSession())
{
ITransaction t = s.BeginTransaction(); //iniciando transao..
10
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
Classe de persistncia:
/Persistence/ProdutoDal.cs
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
Projeto.DAL.Entity; //entidades
Projeto.DAL.Generics; //GenericDal
namespace Projeto.DAL.Persistence
{
public class ProdutoDal : GenericDal<Produto>
{
}
}
11
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
Adicionando referencia no
Projeto Web para a camada DAL:
12
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
Instalando o bootstrap:
13
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
MasterPage
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Layout</title>
<link href="~/Content/bootstrap.css" rel="stylesheet" />
<link href="~/Content/bootstrap-theme.css" rel="stylesheet" />
14
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
</head>
<body>
<div class="container">
<h3>Projeto Loja Virtual</h3>
<br /><br />
<a href="/Produto/Loja" class="btn btn-primary">
Loja de Produtos
</a>
<a href="/Produto/Cesta" class="btn btn-danger">
Minha Cesta de Compras
</a>
<hr />
@RenderBody()
</div>
</body>
</html>
Criando o Controle:
/ProdutoController
15
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
using
using
using
using
using
Aula
21
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.Mvc;
namespace Projeto.Web.Controllers
{
public class ProdutoController : Controller
{
// GET: /Produto/Loja
public ActionResult Loja()
{
return View();
}
// GET: /Produto/Cesta
public ActionResult Cesta()
{
return View();
}
}
}
16
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
@{
ViewBag.Title = "Loja";
Layout = "~/Views/Shared/Layout.cshtml";
}
<h4>Bem vindo Loja de Produtos</h4>
<br /><br />
17
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
@{
ViewBag.Title = "Cesta";
Layout = "~/Views/Shared/Layout.cshtml";
}
<h4>Minha Cesta de Compras</h4>
<br /><br />
App_Start/RouteConfig.cs
Definindo a pgina inicial
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.Mvc;
System.Web.Routing;
namespace Projeto.Web
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
18
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Produto", action = "Loja",
id = UrlParameter.Optional }
);
}
}
}
Executando:
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.Mvc;
Projeto.DAL.Entity; //entidades
Projeto.DAL.Persistence; //acesso a banco
namespace Projeto.Web.Controllers
{
public class ProdutoController : Controller
{
// GET: /Produto/Loja
public ActionResult Loja()
{
try
{
ProdutoDal d = new ProdutoDal(); //persistencia..
//executando a consulta e armazenando em um ViewBag..
ViewBag.Dados = d.FindAll();
}
catch(Exception e)
{
ViewData["Mensagem"] = e.Message;
}
19
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
return View();
}
// GET: /Produto/Cesta
public ActionResult Cesta()
{
return View();
}
}
}
Na pgina:
@{
ViewBag.Title = "Loja";
Layout = "~/Views/Shared/Layout.cshtml";
}
<h4>Bem vindo Loja de Produtos</h4>
<br /><br />
<p>
@ViewData["Mensagem"]
</p>
<div class="row">
@foreach(var p in ViewBag.Dados)
{
<div class="col-md-4">
<div class="panel panel-primary">
<div class="panel-heading">
Produto em Oferta
</div>
<div class="panel-body text-center">
<img src="/Imagens/@p.Foto" width="100" height="100" />
<h4>@p.Nome</h4>
Apenas <strong>@string.Format("{0:c}", p.Preco)</strong>
</div>
<div class="panel-footer">
@Html.ActionLink("Comprar", "AdicionarItem",
new { id = p.IdProduto },
new { @class = "btn btn-success btn-block" } )
</div>
</div>
</div>
}
</div>
20
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
21
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
using
using
using
using
using
Aula
21
System;
System.Collections.Generic;
System.Linq;
System.Web;
Projeto.DAL.Entity; //entidades..
namespace Projeto.Web.Models
{
public class ItemCesta
{
public int Quantidade { get; set; }
public decimal ValorTotal
{
get
{
return (Produto.Preco * Quantidade);
}
}
//Associao (TER-1)
public Produto Produto { get; set; }
}
}
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
namespace Projeto.Web.Models
{
public class Cesta
{
public decimal ValorTotal
{
get
{
22
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
23
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.Mvc;
Projeto.DAL.Entity; //entidades
Projeto.DAL.Persistence; //acesso a banco
Projeto.Web.Models; //classes de modelo..
namespace Projeto.Web.Controllers
{
public class ProdutoController : Controller
{
// GET: /Produto/Loja
public ActionResult Loja()
{
try
{
ProdutoDal d = new ProdutoDal(); //persistencia..
//executando a consulta e armazenando em um ViewBag..
ViewBag.Dados = d.FindAll();
}
catch(Exception e)
{
ViewData["Mensagem"] = e.Message;
}
return View();
}
// GET: /Produto/Cesta
public ActionResult Cesta()
{
return View();
}
24
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
Session.Add("cesta", c);
}
catch(Exception e)
{
ViewData["Mensagem"] = e.Message;
}
return View("Cesta"); //nome da pgina
}
}
}
25
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
<tfoot>
<tr>
<td colspan="6">
Total da Cesta:
<strong> @string.Format("{0:c}", c.ValorTotal) </strong>
</td>
</tr>
</tfoot>
</table>
}
else
{
<label>No existem produtos em sua cesta de compras.</label>
}
Executando:
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.Mvc;
Projeto.DAL.Entity; //entidades
Projeto.DAL.Persistence; //acesso a banco
Projeto.Web.Models; //classes de modelo..
namespace Projeto.Web.Controllers
{
public class ProdutoController : Controller
{
// GET: /Produto/Loja
public ActionResult Loja()
{
26
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
try
{
ProdutoDal d = new ProdutoDal(); //persistencia..
//executando a consulta e armazenando em um ViewBag..
ViewBag.Dados = d.FindAll();
}
catch(Exception e)
{
ViewData["Mensagem"] = e.Message;
}
return View();
}
// GET: /Produto/Cesta
public ActionResult Cesta()
{
return View();
}
27
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
}
//armazenar a cesta em sesso..
Session.Add("cesta", c);
}
catch(Exception e)
{
ViewData["Mensagem"] = e.Message;
}
return View("Cesta"); //nome da pgina
}
}
}
Executando:
@{
ViewBag.Title = "Cesta";
Layout = "~/Views/Shared/Layout.cshtml";
}
<h4>Minha Cesta de Compras</h4>
<br /><br />
@using Projeto.Web.Models
@if(Session["cesta"] != null)
{
<table class="table table-hover">
<thead>
<tr>
28
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
<th>Foto</th>
<th>Nome do Produto</th>
<th>Preo</th>
<th>Quantidade</th>
<th>Total</th>
<th>Operaes</th>
</tr>
</thead>
<tbody>
@{
Cesta c = (Cesta) Session["cesta"];
foreach(ItemCesta item in c.Itens)
{
<tr>
<td> <img src="/Imagens/@item.Produto.Foto"
width="50" height="50" /> </td>
<td> @item.Produto.Nome </td>
<td> @string.Format("{0:c}", item.Produto.Preco) </td>
<td> @item.Quantidade </td>
<td> @string.Format("{0:c}", item.ValorTotal) </td>
<td>
@Html.ActionLink("+", "AumentarQuantidade",
new { id = item.Produto.IdProduto },
new { @class = "btn btn-primary btn-sm" })
@Html.ActionLink("-", "DiminuirQuantidade",
new { id = item.Produto.IdProduto },
new { @class = "btn btn-warning btn-sm" })
@Html.ActionLink("Remover", "RemoverItem",
new { id = item.Produto.IdProduto },
new { @class = "btn btn-danger btn-sm" })
</td>
</tr>
}
}
</tbody>
<tfoot>
<tr>
<td colspan="6">
Total da Cesta:
<strong> @string.Format("{0:c}", c.ValorTotal) </strong>
</td>
</tr>
</tfoot>
</table>
}
else
{
<label>No existem produtos em sua cesta de compras.</label>
}
29
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
Executando:
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.Mvc;
Projeto.DAL.Entity; //entidades
Projeto.DAL.Persistence; //acesso a banco
Projeto.Web.Models; //classes de modelo..
namespace Projeto.Web.Controllers
{
public class ProdutoController : Controller
{
// GET: /Produto/Loja
public ActionResult Loja()
{
try
{
ProdutoDal d = new ProdutoDal(); //persistencia..
//executando a consulta e armazenando em um ViewBag..
ViewBag.Dados = d.FindAll();
}
30
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
catch(Exception e)
{
ViewData["Mensagem"] = e.Message;
}
return View();
}
// GET: /Produto/Cesta
public ActionResult Cesta()
{
return View();
}
31
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
catch(Exception e)
{
ViewData["Mensagem"] = e.Message;
}
return View("Cesta"); //nome da pgina
}
32
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
33
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
Criando as tabelas:
go
create table Cliente(
IdCliente
integer
Nome
nvarchar(50)
Email
nvarchar(50)
Senha
nvarchar(40)
primary key(IdCliente))
go
create table Venda(
IdVenda
integer
DataVenda
date
Valor
decimal
Frete
decimal
PrazoEntrega
integer
IdCliente
integer
primary key(IdVenda),
foreign key(IdCliente) references
identity(1,1),
not null,
not null unique,
not null,
identity(1,1),
not null,
not null,
not null,
not null,
not null,
Cliente(IdCliente))
go
create table ItemVenda(
IdItemVenda
integer
identity(1,1),
Quantidade
integer
not null,
Valor
decimal
not null,
IdVenda
integer
not null,
IdProduto
integer
not null,
primary key(IdItemVenda),
foreign key(IdVenda) references Venda(IdVenda),
foreign key(IdProduto) references Produto(IdProduto))
34
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
Executando:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Projeto.DAL.Entity
{
public class Cliente
{
35
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Projeto.DAL.Entity
{
public class Venda
{
public virtual int IdVenda { get; set; }
public virtual DateTime DataVenda { get; set; }
public virtual decimal Valor { get; set; }
public virtual decimal Frete { get; set; }
public virtual int PrazoEntrega { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Projeto.DAL.Entity
{
public class ItemVenda
{
public virtual int IdItemVenda { get; set; }
public virtual int Quantidade { get; set; }
public virtual decimal Valor { get; set; }
}
}
36
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
Relacionando as entidades:
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
namespace Projeto.DAL.Entity
{
public class Cliente
{
public virtual int IdCliente { get; set; }
public virtual string Nome { get; set; }
public virtual string Email { get; set; }
public virtual string Senha { get; set; }
//Associao (TER-Muitos)
public virtual ICollection<Venda> Vendas { get; set; }
}
}
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
namespace Projeto.DAL.Entity
{
public class Venda
{
public virtual int IdVenda { get; set; }
public virtual DateTime DataVenda { get; set; }
public virtual decimal Valor { get; set; }
public virtual decimal Frete { get; set; }
public virtual int PrazoEntrega { get; set; }
//Relacionamentos:
public virtual Cliente Cliente { get; set; }
public virtual ICollection<ItemVenda> ItensVenda { get; set; }
}
}
37
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
using
using
using
using
using
Aula
21
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
namespace Projeto.DAL.Entity
{
public class ItemVenda
{
public virtual int IdItemVenda { get; set; }
public virtual int Quantidade { get; set; }
public virtual decimal Valor { get; set; }
//Relacionamentos..
public virtual Venda Venda { get; set; }
public virtual Produto Produto { get; set; }
}
}
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
namespace Projeto.DAL.Entity
{
public class Produto
{
public virtual int IdProduto
public virtual string Nome {
public virtual decimal Preco
public virtual string Foto {
{ get; set; }
get; set; }
{ get; set; }
get; set; }
//Relacionamento..
Public virtual ICollection<ItemVenda> ItemVenda { get; set; }
}
}
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
FluentNHibernate.Mapping; //ORM (Mapeamento)
Projeto.DAL.Entity; //classes de entidade
namespace Projeto.DAL.Mapping
{
//Regra 1) Herdar de ClassMap e definir o tipo da entidade..
38
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
atributos..
p.Nome, "Nome").Length(50).Not.Nullable();
p.Preco, "Preco").Not.Nullable();
p.Foto, "Foto").Length(50).Not.Nullable().Unique();
}
}
}
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
FluentNHibernate.Mapping; //mapeamento..
Projeto.DAL.Entity; //entidades..
namespace Projeto.DAL.Mapping
{
public class ClienteMap : ClassMap<Cliente>
{
public ClienteMap()
{
Table("Cliente"); //nome da tabela
//chave primria
Id(c => c.IdCliente, "IdCliente").GeneratedBy.Identity();
39
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
//demais
Map(c =>
Map(c =>
Map(c =>
Aula
21
atributos..
c.Nome, "Nome").Length(50).Not.Nullable();
c.Email, "Email").Length(50).Not.Nullable().Unique();
c.Senha, "Senha").Length(40).Not.Nullable();
}
}
}
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
FluentNHibernate.Mapping; //ORM
Projeto.DAL.Entity; //entidades
namespace Projeto.DAL.Mapping
{
public class VendaMap : ClassMap<Venda>
{
public VendaMap()
{
Table("Venda");
Id(v => v.IdVenda, "IdVenda").GeneratedBy.Identity();
Map(v
Map(v
Map(v
Map(v
=>
=>
=>
=>
v.DataVenda, "DataVenda").Not.Nullable();
v.Valor, "Valor").Not.Nullable();
v.Frete, "Frete").Not.Nullable();
v.PrazoEntrega, "PrazoEntrega").Not.Nullable();
}
}
}
40
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
using
using
using
using
using
using
using
Aula
21
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
FluentNHibernate.Mapping; //ORM
Projeto.DAL.Entity; //entidades
namespace Projeto.DAL.Mapping
{
public class ItemVendaMap : ClassMap<ItemVenda>
{
public ItemVendaMap()
{
Table("ItemVenda");
Id(i => i.IdItemVenda, "IdItemVenda").GeneratedBy.Identity();
Map(i => i.Quantidade, "Quantidade").Not.Nullable();
Map(i => i.Valor, "Valor").Not.Nullable();
}
}
}
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
FluentNHibernate.Mapping; //ORM
Projeto.DAL.Entity; //entidades
41
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
namespace Projeto.DAL.Mapping
{
public class VendaMap : ClassMap<Venda>
{
public VendaMap()
{
Table("Venda");
Id(v => v.IdVenda, "IdVenda").GeneratedBy.Identity();
Map(v
Map(v
Map(v
Map(v
=>
=>
=>
=>
v.DataVenda, "DataVenda").Not.Nullable();
v.Valor, "Valor").Not.Nullable();
v.Frete, "Frete").Not.Nullable();
v.PrazoEntrega, "PrazoEntrega").Not.Nullable();
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
FluentNHibernate.Mapping; //ORM
Projeto.DAL.Entity; //entidades
namespace Projeto.DAL.Mapping
{
public class ItemVendaMap : ClassMap<ItemVenda>
{
public ItemVendaMap()
{
Table("ItemVenda");
Id(i => i.IdItemVenda, "IdItemVenda").GeneratedBy.Identity();
Map(i => i.Quantidade, "Quantidade").Not.Nullable();
Map(i => i.Valor, "Valor").Not.Nullable();
//Relacionamentos..
References(i => i.Venda).Column("IdVenda"); //FK
References(i => i.Produto).Column("IdProduto"); //FK
}
}
}
42
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
Classes de persistncia:
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
Projeto.DAL.Entity; //entidades
Projeto.DAL.Generics; //DAL Generico
Projeto.DAL.Util; //HibernateUtil
namespace Projeto.DAL.Persistence
{
public class ClienteDal : GenericDal<Cliente>
{
}
}
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
Projeto.DAL.Entity;
Projeto.DAL.Generics;
Projeto.DAL.Util;
namespace Projeto.DAL.Persistence
{
public class VendaDal : GenericDal<Venda>
{
}
}
43
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
using
using
using
using
using
using
using
using
Aula
21
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
Projeto.DAL.Entity;
Projeto.DAL.Generics;
Projeto.DAL.Util;
namespace Projeto.DAL.Persistence
{
public class ItemVendaDal : GenericDal<ItemVenda>
{
}
}
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
FluentNHibernate.Mapping; //mapeamento..
Projeto.DAL.Entity; //entidades..
namespace Projeto.DAL.Mapping
{
public class ClienteMap : ClassMap<Cliente>
{
public ClienteMap()
{
Table("Cliente"); //nome da tabela
//chave primria
44
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
atributos..
c.Nome, "Nome").Length(50).Not.Nullable();
c.Email, "Email").Length(50).Not.Nullable().Unique();
c.Senha, "Senha").Length(40).Not.Nullable();
//Mapeamento da collection..
//Inverse -> define que a chave estrangeira (KeyColumn)
//est localizada na classe definida pela collection
HasMany(c => c.Vendas).KeyColumn("IdCliente").Inverse();
}
}
}
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
FluentNHibernate.Mapping; //ORM (Mapeamento)
Projeto.DAL.Entity; //classes de entidade
namespace Projeto.DAL.Mapping
{
//Regra 1) Herdar de ClassMap e definir o tipo da entidade..
public class ProdutoMap : ClassMap<Produto>
{
//Regra 2) Definir um construtor e detalhar o mapeamento..
public ProdutoMap()
{
//Nome da tabela..
Table("Produto");
//Chave primria..
Id(p => p.IdProduto, "IdProduto").GeneratedBy.Identity();
//demais
Map(p =>
Map(p =>
Map(p =>
atributos..
p.Nome, "Nome").Length(50).Not.Nullable();
p.Preco, "Preco").Not.Nullable();
p.Foto, "Foto").Length(50).Not.Nullable().Unique();
//Relacionamento muitos
HasMany(p => p.ItemVenda).KeyColumn("IdProduto").Inverse();
}
}
}
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
FluentNHibernate.Mapping; //ORM
45
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
=>
=>
=>
=>
v.DataVenda, "DataVenda").Not.Nullable();
v.Valor, "Valor").Not.Nullable();
v.Frete, "Frete").Not.Nullable();
v.PrazoEntrega, "PrazoEntrega").Not.Nullable();
46
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
using
using
using
using
using
Aula
21
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.Mvc;
namespace Projeto.Web.Controllers
{
public class ClienteController : Controller
{
//pgina de login dos clientes..
public ActionResult Login()
{
return View();
}
}
}
47
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.ComponentModel.DataAnnotations;
namespace Projeto.Web.Models
{
public class ClienteLoginModel //formulrio..
{
[Required(ErrorMessage = "Por favor, informe seu email.")]
[Display(Name = "Endereo de Email:")] //label
public string Email { get; set; }
[Required(ErrorMessage = "Por favor, informe sua senha.")]
[Display(Name = "Senha de Acesso:")] //label
public string Senha { get; set; }
}
}
48
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
49
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
Projeto.DAL.Entity; //entidades
Projeto.DAL.Generics; //DAL Generico
Projeto.DAL.Util; //HibernateUtil
NHibernate;
NHibernate.Linq;
namespace Projeto.DAL.Persistence
{
public class ClienteDal : GenericDal<Cliente>
{
//Mtodo para retornar 1 Cliente pelo Email e Senha..
public Cliente Authenticate(string Email, string Senha)
{
//abrir conexo com o banco de dados..
using(ISession s = HibernateUtil.GetSessionFactory().OpenSession())
{
//LINQ - Language Integrated Query
//SQL -> select * from Cliente where Email = @v1 and Senha = @v2
var query = from c in s.Query<Cliente>()
where c.Email.Equals(Email) && c.Senha.Equals(Senha)
select c;
//retornar o cliente..
return query.FirstOrDefault();
}
}
}
}
@{
ViewBag.Title = "Login";
Layout = "~/Views/Shared/Layout.cshtml";
}
<div class="text-center">
<h3>Login de Clientes</h3>
Para finalizar a compra, informe seus dados.
<br /><br />
<div class="col-md-4 col-md-offset-4">
@model Projeto.Web.Models.ClienteLoginModel
@using(Html.BeginForm("AutenticarCliente", "Cliente", FormMethod.Post))
{
@Html.LabelFor(model => model.Email)
@Html.TextBoxFor(model => model.Email,
50
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
Classe de Controle:
using
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.Mvc;
Projeto.DAL.Entity; //entidades..
Projeto.DAL.Persistence; //acesso a banco..
Projeto.Web.Models; //classes de modelo..
System.Web.Security; //autenticao..
namespace Projeto.Web.Controllers
{
public class ClienteController : Controller
{
//pgina de login dos clientes..
public ActionResult Login()
{
return View();
}
//mtodo para autenticao dos usuarios..
[HttpPost] //recebe requisio de dados POST
public ActionResult AutenticarCliente(ClienteLoginModel model)
{
try
{
if(ModelState.IsValid) //validao..
{
ClienteDal d = new ClienteDal(); //persistencia..
Cliente c = d.Authenticate(model.Email, model.Senha);
if(c != null) //se o cliente foi encontrado..
{
//Gerar um Ticket de acesso para o cliente..
51
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
FormsAuthentication.SetAuthCookie(c.Email, false);
//armazenar o cliente em sesso..
Session.Add("cliente", c);
//redirecionar para a pgina de Compra..
return RedirectToAction("FinalizarCompra", "Venda");
}
else
{
ViewData["Mensagem"] = "Acesso Negado.";
}
}
}
catch(Exception e)
{
ViewData["Mensagem"] = e.Message;
}
return View("Login"); //nome da pgina..
}
}
}
<authentication mode="Forms">
<forms loginUrl="/Cliente/Login"/>
</authentication>
52
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.Mvc;
53
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
namespace Projeto.Web.Controllers
{
[Authorize] //S permite usuarios autenticados..
public class VendaController : Controller
{
//pgina..
public ActionResult FinalizarCompra()
{
return View();
}
}
}
54
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
@{
ViewBag.Title = "FinalizarCompra";
Layout = "~/Views/Shared/Layout.cshtml";
}
<div class="text-center">
<h3>Finalizar Compra</h3>
<div class="col-md-6 col-md-offset-3">
<div class="panel panel-primary">
<div class="panel-heading">
Resumo da Compra
</div>
<div class="panel-body">
<strong>Dados do Cliente:</strong>
<hr />
@using Projeto.DAL.Entity
@{
Cliente c = (Cliente)Session["cliente"];
<label>Cdigo:</label> @c.IdCliente <br />
<label>Nome do Cliente:</label> @c.Nome <br />
<label>Endereo de Email:</label> @c.Email <br />
}
<br />
<strong>Dados da Compra:</strong>
<hr />
@using Projeto.Web.Models
@{
Cesta cesta = (Cesta)Session["cesta"];
<label>Total da Compra: </label>
@String.Format("{0:c}", cesta.ValorTotal) <br />
<label>Itens da Compra:</label> <br />
<table class="table table-hover">
<thead>
<tr>
<th>Foto</th>
<th>Nome do Produto</th>
<th>Preo</th>
<th>Quantidade</th>
<th>Total</th>
</tr>
</thead>
<tbody>
@foreach (ItemCesta item in cesta.Itens)
{
<tr>
<td>
55
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
<img src="/Imagens/@item.Produto.Foto"
width="50" height="50" />
</td>
<td>@item.Produto.Nome </td>
<td>@string.Format("{0:c}",
item.Produto.Preco) </td>
<td>@item.Quantidade </td>
<td>@string.Format("{0:c}", item.ValorTotal)
</td>
</tr>
}
</tbody>
</table>
}
</div>
</div>
</div>
</div>
56
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
Executando:
57
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
Finalizar Compra:
58
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
go
create table Endereco(
IdEndereco
integer
identity(1,1),
Logradouro
nvarchar(150)
not null,
Bairro
nvarchar(50)
not null,
Cidade
nvarchar(50)
not null,
Estado
nvarchar(50)
not null,
Cep
nvarchar(15)
not null,
IdCliente
integer
not null,
primary key(IdEndereco),
foreign key(IdCliente) references Cliente(IdCliente))
59
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
Classe de entidade:
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
namespace Projeto.DAL.Entity
{
public class Endereco
{
public virtual int IdEndereco { get; set; }
public virtual string Logradouro { get; set; }
public virtual string Bairro { get; set; }
public virtual string Cidade { get; set; }
public virtual string Estado { get; set; }
public virtual string Cep { get; set; }
}
}
Classe de mapeamento:
/Mapping/EnderecoMap.cs
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
FluentNHibernate.Mapping; //ORM
Projeto.DAL.Entity; //entidades..
namespace Projeto.DAL.Mapping
{
public class EnderecoMap : ClassMap<Endereco>
{
60
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
//construtor..
public EnderecoMap()
{
Table("Endereco"); //nome da tabela..
//chave primria..
Id(e => e.IdEndereco, "IdEndereco").GeneratedBy.Identity();
//demais
Map(e =>
Map(e =>
Map(e =>
Map(e =>
Map(e =>
atributos / campos..
e.Logradouro, "Logradouro").Length(150).Not.Nullable();
e.Bairro, "Bairro").Length(50).Not.Nullable();
e.Cidade, "Cidade").Length(50).Not.Nullable();
e.Estado, "Estado").Length(50).Not.Nullable();
e.Cep, "Cep").Length(15).Not.Nullable();
//relacionamento..
//Endereco tem foreign key para Cliente..
References(e => e.Cliente).Column("IdCliente");
}
}
}
Classe de persistncia:
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
Projeto.DAL.Generics;
Projeto.DAL.Entity;
namespace Projeto.DAL.Persistence
{
public class EnderecoDal : GenericDal<Endereco>
{
}
}
61
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
System.Security.Cryptography; //criptografia do .net
namespace Projeto.Util.Security
{
public class Criptografia
{
62
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
System.Net;
System.Net.Mail;
namespace Projeto.Util.Messages
{
public class EmailMessage
{
//parametros para o envio de email..
public string Destinatario { get; set; }
public string Assunto { get; set; }
public string Conteudo { get; set; }
63
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
//configuraes..
private readonly string Conta = "cotiexemplo@gmail.com";
private readonly string Senha = "@coticoti@";
private readonly string Smtp = "smtp.gmail.com";
private readonly int Porta = 587;
//mtodo para enviar a mensagem..
public void EnviarMensagem()
{
try
{
MailMessage msg = new MailMessage(Conta, Destinatario);
msg.Subject = Assunto;
msg.Body = Conteudo;
SmtpClient s = new SmtpClient(Smtp, Porta);
s.EnableSsl = true; //enviar email seguro..
s.Credentials = new NetworkCredential(Conta, Senha);
//mandar o email..
s.Send(msg);
}
catch(Exception e)
{
//retornar mensagem de erro..
throw new Exception("Erro ao enviar email: " + e.Message);
}
}
}
}
64
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
65
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
Classe de modelo
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.ComponentModel.DataAnnotations;
namespace Projeto.Web.Models
{
public class ClienteCadastroModel
{
[Required(ErrorMessage = "Por favor, informe o nome.")]
[Display(Name = "Nome do Cliente:")]
public string Nome { get; set; }
[Required(ErrorMessage = "Por favor, informe o email.")]
[EmailAddress(ErrorMessage = "Por favor, informe um email correto.")]
[Display(Name = "Endereo de Email:")]
public string Email { get; set; }
[Required(ErrorMessage = "Por favor, informe a senha.")]
[Display(Name = "Senha de Acesso:")]
public string Senha { get; set; }
[Required(ErrorMessage = "Por favor, confirme a senha.")]
[Compare("Senha", ErrorMessage = "Por favor, informe a senha
corretamente.")]
[Display(Name = "Confirme sua Senha:")]
public string SenhaConfirm { get; set; }
[Required(ErrorMessage = "Por favor, informe o logradouro.")]
[Display(Name = "Logradouro:")]
public string Logradouro { get; set; }
[Required(ErrorMessage = "Por favor, informe o bairro.")]
[Display(Name = "Bairro:")]
public string Bairro { get; set; }
66
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
Criando o formulrio:
@{
ViewBag.Title = "Cadastro";
Layout = "~/Views/Shared/Layout.cshtml";
}
<h3>Cadastro de Clientes</h3>
Para criar sua conta, informe os dados abaixo. <br />
<br /><br />
@model Projeto.Web.Models.ClienteCadastroModel
<div class="row">
@using(Html.BeginForm("CadastrarCliente", "Cliente", FormMethod.Post))
{
<div class="col-md-4">
<strong>Dados do Cliente</strong>
<hr />
@Html.ValidationSummary()
@Html.LabelFor(model => model.Nome) <br />
@Html.TextBoxFor(model => model.Nome,
new { @class = "form-control", @placeholder = "Digite aqui" })
<br />
@Html.LabelFor(model => model.Email) <br />
@Html.TextBoxFor(model => model.Email,
new { @class = "form-control", @placeholder = "Digite aqui" })
<br />
@Html.LabelFor(model => model.Senha) <br />
@Html.PasswordFor(model => model.Senha,
new { @class = "form-control", @placeholder = "Digite aqui" })
<br />
@Html.LabelFor(model => model.SenhaConfirm) <br />
@Html.PasswordFor(model => model.SenhaConfirm,
new { @class = "form-control", @placeholder = "Digite aqui" })
<br />
<input type="submit" value="Cadastrar Cliente"
67
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
68
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
Executando:
https://github.com/
69
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
https://github.com/hamboldt/Correios.Net
70
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.Mvc;
Projeto.DAL.Entity; //entidades..
Projeto.DAL.Persistence; //acesso a banco..
Projeto.Web.Models; //classes de modelo..
System.Web.Security; //autenticao..
Correios.Net; //biblioteca..
Projeto.Util.Security; //utilitarios..
Projeto.Util.Messages; //utilitarios..
namespace Projeto.Web.Controllers
{
public class ClienteController : Controller
{
//pgina de login dos clientes..
public ActionResult Login()
{
//verificando se o cliente j est em sesso..
if(Session["cliente"] != null)
{
return RedirectToAction("FinalizarCompra", "Venda");
}
return View();
}
71
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
72
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
{
try
{
if(ModelState.IsValid) //validao..
{
ClienteDal d = new ClienteDal(); //persistencia..
Cliente c = d.Authenticate(model.Email, model.Senha);
if(c != null) //se o cliente foi encontrado..
{
//Gerar um Ticket de acesso para o cliente..
FormsAuthentication.SetAuthCookie(c.Email, false);
//armazenar o cliente em sesso..
Session.Add("cliente", c);
//redirecionar para a pgina de Compra..
return RedirectToAction("FinalizarCompra", "Venda");
}
else
{
ViewData["Mensagem"] = "Acesso Negado.";
}
}
}
catch(Exception e)
{
ViewData["Mensagem"] = e.Message;
}
return View("Login"); //nome da pgina..
}
}
}
73
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
using
using
using
using
using
using
using
using
using
using
using
using
Aula
21
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.Mvc;
Projeto.DAL.Entity; //entidades..
Projeto.DAL.Persistence; //acesso a banco..
Projeto.Web.Models; //classes de modelo..
System.Web.Security; //autenticao..
Correios.Net; //biblioteca..
Projeto.Util.Security; //utilitarios..
Projeto.Util.Messages; //utilitarios..
namespace Projeto.Web.Controllers
{
public class ClienteController : Controller
{
//pgina de login dos clientes..
public ActionResult Login()
{
//verificando se o cliente j est em sesso..
if(Session["cliente"] != null)
{
return RedirectToAction("FinalizarCompra", "Venda");
}
return View();
}
74
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
[HttpPost]
public ActionResult CadastrarCliente(ClienteCadastroModel model)
{
if(ModelState.IsValid) //passou nas validaes..
{
try
{
Cliente c = new Cliente(); //entidade..
Endereco e = new Endereco(); //entidade..
c.Nome = model.Nome;
c.Email = model.Email;
c.Senha = Criptografia.GerarHashMD5(model.Senha);
e.Logradouro = model.Logradouro;
e.Bairro = model.Bairro;
e.Cidade = model.Cidade;
e.Estado = model.Estado;
e.Cep = model.Cep;
e.Cliente = c; //relacionamento...
ClienteDal cd = new ClienteDal(); //persistencia..
cd.Insert(c); //gravando o cliente..
EnderecoDal ed = new EnderecoDal(); //persistencia..
ed.Insert(e); //gravando o endereco..
ViewData["Mensagem"] = "Cadastro realizado com sucesso.";
ModelState.Clear(); //limpar os campos do formulrio..
EnviarEmailConfirmacao(c);
}
catch(Exception e)
{
//imprimir mensage de erro..
ViewData["Mensagem"] = e.Message;
}
}
return View("Login");
}
75
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
email.Destinatario = c.Email;
email.Assunto = "Cadastro efetuado com sucesso - Loja Virtual";
email.Conteudo = "Seja bem vindo " + c.Nome
+ ", sua conta foi criada com sucesso.";
email.EnviarMensagem();
}
76
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
Cliente cadastrado:
77
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
Email recebido:
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
Projeto.DAL.Entity; //entidades
Projeto.DAL.Generics; //DAL Generico
Projeto.DAL.Util; //HibernateUtil
NHibernate;
NHibernate.Linq;
namespace Projeto.DAL.Persistence
{
public class ClienteDal : GenericDal<Cliente>
{
//Mtodo para retornar 1 Cliente pelo Email e Senha..
public Cliente Authenticate(string Email, string Senha)
{
//abrir conexo com o banco de dados..
using(ISession s = HibernateUtil.GetSessionFactory().OpenSession())
{
//LINQ - Language Integrated Query
//SQL -> select * from Cliente where Email = @v1 and Senha = @v2
var query = from c in s.Query<Cliente>()
where c.Email.Equals(Email) && c.Senha.Equals(Senha)
select c;
78
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
//retornar o cliente..
return query.FirstOrDefault();
}
}
//Mtodo para verificar se o email de um cliente ja existe
public bool HasEmail(string Email)
{
using(ISession s = HibernateUtil.GetSessionFactory().OpenSession())
{
var query = from c in s.Query<Cliente>()
where c.Email.Equals(Email)
select c;
if (query.Count() > 0)
return true; //email existe no banco..
else
return false; //email nao foi cadastrado..
}
}
}
}
No ClienteController:
[HttpPost]
public ActionResult CadastrarCliente(ClienteCadastroModel model)
{
if(ModelState.IsValid) //passou nas validaes..
{
try
{
ClienteDal cd = new ClienteDal(); //persistencia..
if (cd.HasEmail(model.Email)) //se o email ja existe!
{
throw new Exception("Email j est cadastrado.
Tente outro.");
}
Cliente c = new Cliente(); //entidade..
Endereco e = new Endereco(); //entidade..
c.Nome = model.Nome;
c.Email = model.Email;
c.Senha = Criptografia.GerarHashMD5(model.Senha);
e.Logradouro = model.Logradouro;
e.Bairro = model.Bairro;
e.Cidade = model.Cidade;
e.Estado = model.Estado;
e.Cep = model.Cep;
e.Cliente = c; //relacionamento...
79
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
Executando:
80
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
ReportViewer
Ferramenta da Microsoft para gerao
de relatrios em aplicaes .NET
81
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
82
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
83
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
Adicionando os parmetros:
84
C# WebDeveloper
Domingo, 30 de Agosto de 2015
Desenvolvimento web com Asp.Net MVC
Acesso a banco de dados com FluentNHibernate
Aula
21
85