EF4 POCO + Data Annotations + ASP.NET MVC 2.0
Olá pessoal, nos ultimos posts andei falando bastando sobre o Entity Framework 4 CTP2. Estou realmente empolgado com a galera do EF e a API Code-Only. Eu sempre achei a idéia de usar data annotations muito legal, ainda mais depois que vi como a coisa funciona muito bem com o ASP.NET MVC.
O ASP.NET MVC possui uma integração que possibilita a validação client-side e server-side de uma maneira bem facil. Eu sempre usei LINQ e EF nos meus projetos, sempre com a ferramenta de geração automática de entidades estas ferramentas de geração de código dificultam o trabalho de quem quer usar data annotations. Agora com a API Code-Only tudo se encaixa perfeitamente! estou pensando em mudar a infra do meu projeto e utilizar EF4 POCO+Data annotations+MVC 2. Vamos ver um exemplo de como as coisas funcionam, vou exibir apenas a integração, você pode obter a solução completa no link de download no final do post.
1: public class Contact
2: {
3: public int ContactID { get; set; }
4:
5: [Required(ErrorMessage="O nome deve ser preenchido"), StringLength(100)]
6: public String Name { get; set; }
7:
8: [Required(ErrorMessage="O e-mail deve ser preenchido")]
9: public String Email { get; set; }
10:
11: public String Phone { get; set; }
12: }
Classe code-only com as configurações usando Data annotations
1: [AcceptVerbs(HttpVerbs.Post)]
2: public ActionResult Create([Bind(Exclude = "ID")] Contact contact)
3: {
4: try
5: {
6:
7: if (!ModelState.IsValid)
8: return View();
9:
10:
11: return RedirectToAction("Index");
12: }
13: catch
14: {
15: return View();
16: }
17: }
1: public ActionResult Create([Bind(Exclude = "ID")] Contact contact)
Estamos falando que ID não precisa ser carregado.
O código abaixo é o código da view create.
<%@ Import Namespace="DataLayer.Entities" %> <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<DataLayer.Entities.Contact>" %> <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> Create</asp:Content><asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <script src="../../Scripts/jquery-1.3.2.min.js" type="text/javascript"></script>1:
2: <script src="../../Scripts/jquery.validate.min.js" type="text/javascript">
1: </script>
2: <script src="../../Scripts/MicrosoftMvcJQueryValidation.js" type="text/javascript"></script>
<h2>
Contato</h2>
<%1: Html.EnableClientValidation();%>
<%1: = Html.ValidationSummary()%>
<%1: using (Html.BeginForm())
2: {%>
<%1: =Html.EditorForModel()%>
<p>
<input type="submit" value="Save" />
</p>
<%1: }%>
<div>
<%1: =Html.ActionLink("Back to List", "Index")%>
</div>
</asp:Content>
A validação client-side está na seguinte parte:
<script src="../../Scripts/jquery-1.3.2.min.js" type="text/javascript"></script>1:
2: <script src="../../Scripts/jquery.validate.min.js" type="text/javascript">
1: </script>
2: <script src="../../Scripts/MicrosoftMvcJQueryValidation.js" type="text/javascript"></script>
<%1: Html.EnableClientValidation();%>
A integração é muito simples! o código completo está abaixo