Hiển thị các bài đăng có nhãn ASP.Net MVC. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn ASP.Net MVC. Hiển thị tất cả bài đăng

Thứ Hai, 2 tháng 3, 2009

ASP.NET Ajax : Cách Gọi ASP NET MVC Controller Actions

ASP.NET MVC cung cấp một framework để xây dựng các ứng dụng theo Model-View-Controller (MVC) pattern. Mô hình này đại diện cho dữ liệu sử dụng trong các ứng dụng, các Controller chịu trách nhiệm cho hành động đó xảy ra và View là đại diện cho giao diện người dùng mà người dùng cuối tương tác trong ứng dụng. The ASP.NET AJAX Thư viện có thể đóng một vai trò quan trọng trong các ứng dụng ASP.NET MVC khi một trang cần được Ajax bật. Hướng dẫn này sẽ thảo luận làm thế nào để trở về JSON (JavaScript Object Notation) kết quả từ một Controller Actions quá trình và trong vòng một trang view. Các bước thảo luận bao gồm:
  • Tạo một dự án ASP.NET MVC
  • Tạo một JsonResult Controller Action
  • Gọi một Controller Action và Kết quả Binding
Bước 1: Tạo một dự án ASP.NET MVC

ASP.NET MVC framework không được bao gồm trong Visual Studio 2008 theo mặc định, nhưng có thể được tải về và cài đặt từ http://www.asp.net/mvc. Visual Studio 2010 đi kèm với ASP.NET MVC ra khỏi hộp. Để tạo một ASP.NET mới MVC dự án chọn File | New Project và chọn ASP.NET MVC Web Application từ mẫu. Sau khi tạo dự án bạn sẽ thấy một số các thư mục trong dự án bao gồm một lý, kiểu xe và thư mục xem.

Bước 2: Tạo một JsonResult điều khiển hành động

Mở rộng các thư mục Models và thêm một class mới vào project có tên là Customer có các thuộc tính sau:

public class Customer
{
      public int CustomerID { get; set; }
      public string FirstName { get; set; }
      public string LastName { get; set; }
      public int Age { get; set; }
}

Mở rộng thư mục Controllers và mở các class tên là HomeController.cs trong cửa sổ soạn code. Chú ý rằng nó có một vài hành động được xác định theo mặc định. Nhập khẩu các không gian tên được chỉ định cho các Customer class sử dụng hoặc tuyên bố nhập khẩu và sau đó thêm các action sau đây để trả về một List.

public JsonResult GetCustomers()
{
        List custs = new List
       {
             new Customer
             {
                  CustomerID = 1,
                  FirstName = "John",
                  LastName = "Doe",
                 Age = 50
              },
             new Customer
            {
                    CustomerID = 2,
                  FirstName = "Jane",
                  LastName = "Doe",
                  Age = 47
            }
       };
       return Json(custs);
}


ASP.NET MVC Controller actions thường được trả lại một loại ActionResult. Tuy nhiên, bởi vì actions này trở về dữ liệu JSON một loại JsonResult trở lại được xác định. Khi đối tượng List được tạo ra nó được chuyển thành dữ liệu JSON bằng cách sử dụng phương pháp xây dựng trong JSON.

Bước 3: Kêu gọi một hành động điều khiển và Kết quả Binding

Mở rộng thư mục Views/Home và mở file index.aspx trong cửa sổ soạn code. Để sử dụng chức năng trong Script ASP.NET Script Library có thể được dùng để nạp object script và các tập lệnh MicrosoftAjaxWebServices.js. Thêm dòng sau vào trong kiểm soát nội dung rằng có một giá trị ContentPlaceHolderID của "MainContent":




Điều quan trọng cần lưu ý là lệnh được dùng nhiều lần trong một ứng dụng ASP.NET MVC có thể được tải tại của ứng dụng trang Master để bảo trì đơn giản hóa như trái ngược với tải chúng trong một Xem cụ thể.

Bây giờ mà các thành phần DataView được tạo ra mẫu mà nó gắn với nhu cầu để được tạo ra. Thêm sau mẫu mã dưới đây đóng yếu tố :

 
        {{FirstName}} {{LastName}}
       



DangTrung

Thứ Bảy, 7 tháng 2, 2009

ASP.Net MVC : Ajax và jQuery

Tôi đã được sử dụng Asp.Net MVC trong thời gian khá lâu và thực sự thích nó. Nó rất dễ dàng để làm công cụ ajax nhưng tôi nghĩ rằng, dễ dàng hơn nếu bạn sử dụng jQuery.

Trong bài này tôi sẽ làm bao gồm :
  • Làm thế nào để cập nhật một phần
  • Làm thế nào để thực hiện một Nhận yêu cầu với các tham số bổ sung trong chuỗi truy vấn
  • Làm thế nào để tạo một yêu cầu Đăng với paremeters bổ sung bên trong cơ thể yêu cầu
  • Điều gì sẽ xảy ra nếu javascript bị vô hiệu hóa hoặc người dùng bằng cách sử dụng một trình duyệt cũ hơn
Menu giao diện

Các mục trình đơn trong trang chủ sẽ được như dưới đây;





Như đã thấy trong các phần tô đậm thay vì sử dụng Ajax.ActionLink tôi sẽ sử dụng  Html.ActionLink với lớp tuỳ thuộc tính xác định loại yêu cầu sẽ được gọi bằng phương pháp ajax jQuery. Tất cả các trình đơn invokes phương pháp hành động TestMethod trong lớp HomeController.

Chúng ta cần thêm các thư viện và một jquery javascript tùy chỉnh tập tin có chứa các phương pháp helper.

Đây là Helper.js


Phần code tiếp theo của  Helper.js


Cập nhật Xem và Lưu kết quả cuộc gọi Ajax với jQuery

Các đối tượng javascript Helper có hai phương pháp helper được MakeRequest và UpdateView. Phương pháp MakeRequest chấp nhận một đối tượng có tính chất bổ sung và các chức năng như url, dữ liệu, contentType. Phương pháp thứ hai chỉ đơn giản UpdateView cập nhật các khu vực trong thành phần với id chính. Nhưng vì div chính cũng chứa các div chân trang chúng tôi chỉ đơn giản là lọc div chân và sau đó cập nhật phần còn lại của chính bằng một selector jquery đơn giản.


Bộ chọn jQuery là:

$("#main > :not(#footer)");

Phần thứ hai của lớp helper bắt đầu từ dòng 30 được thực hiện khi các tài liệu được nạp. Sau khi tài liệu chúng tôi kết nạp một sự kiện nhấp chuột vào trình đơn div (id = trình đơn). Vì vậy:
  • Bất cứ khi nào một sự kiện nhấp chuột xảy ra bên trong trình đơn div chúng tôi kiểm tra các mục tiêu, nếu nó là một phần tử neo.
  • Nếu nó là một thẻ neo chúng tôi kiểm tra xem nó là thuộc tính lớp
  • Nếu các yếu tố đã neo html lớp chúng tôi gọi một Http Đăng yêu cầu. nếu nó đã jsonGet lớp chúng tôi gọi một Http Nhận và gửi dữ liệu thêm trong chuỗi truy vấn, nếu nó có jsonPost lớp chúng tôi một bài incoke Http và gửi dữ liệu bổ sung trong cơ thể yêu cầu.
Khi thành công chức năng gọi lại được gọi là nó vượt qua các phản ứng recevied với phương pháp UpdateView trong đối tượng người trợ giúp. Sau khi nhận được mặt UpdateView đầu vào nó kiểm tra kiểu đối số này. Nếu nó là một chuỗi các phương pháp chỉ cần cập nhật với các mục được thông qua. Nếu đầu vào nhận được là một đối tượng phương pháp lặp qua các thuộc tính của đối tượng và tạo ra một yếu tố ul và cập nhật với ul này.

Phương pháp UpdateView từ các đối tượng người trợ giúp.


Và cuối cùng ở đây là ActionMethod TestMethod sẽ xử lý các yêu cầu gửi đến.


Bây giờ khi chúng tôi nhận được yêu cầu
  • Trước tiên, chúng tôi kiểm tra xem nó là một yêu cầu ajax nếu nó không phải là chúng ta chỉ cần vượt qua các đối tượng mô hình để xem TestMethod
  • Nếu yêu cầu này là một yêu cầu ajax chúng tôi kiểm tra kiểu phản ứng mà người dùng yêu cầu nếu contentType là html, chúng tôi khiến một tên partialview SimplePartialView.
  • Nếu một yêu cầu ajax với contentType của json chúng tôi kiểm tra HttpMethod của yêu cầu đó. Nếu httpmethod là GET chúng ta đọc được đăng các giá trị (mà cũng có những cái được thêm vào qua jQuery bên cạnh những người trong url yêu cầu như trong masterpage) và gửi lại cho khách hàng ở định dạng json. Nếu phương pháp POST http là chúng ta đọc dữ liệu bổ sung từ cơ thể yêu cầu và gửi chúng cho khách hàng về định dạng json.
Tất nhiên bạn có thể có một actionmethod thêm rằng sẽ chỉ nhận các yêu cầu được làm bằng Http Đăng HttpPost sử dụng thuộc tính như:

[HttpPost]
public ActionResult TestMethod()

Điều gì sẽ xảy ra nếu người dùng đã bị vô hiệu hoá javascript hoặc sử dụng một trình duyệt cũ hơn

Ứng dụng của chúng tôi sẽ vẫn chạy. Bởi vì chúng tôi sử dụng Html.ActionLink thay vì Ajax.ActionLink nếu javascript bị vô hiệu hóa các mã jQuery của chúng tôi sẽ không được gọi. Vì vậy, ví dụ nếu người dùng nhấp vào JSON (Post) liên kết nó sẽ nhận được một phản ứng html thay vì json bởi vì chúng tôi kiểm tra xem yêu cầu là một yêu cầu ajax trong TestMethod với phương pháp khuyến nông isAjaxRequest và nếu nó không phải là chúng tôi chỉ đơn giản render xem TestMethod.

Sau đây là xem TestMethod TestMethod.aspx

 and SimpleViewPartialView.ascx


Chúc các bạn thành công.
DangTrung.

Thứ Sáu, 11 tháng 4, 2008

Filtering Dropdowns trong ASP.Net MVC sử dụng JQuery va JSon.

Có rất  nhiều cách để làm Filter cho Dropdowns mà Microsoft hổ trợ nhiều tool để phát triển,  với tôi, tôi không thích dựa nhiều tool. Nói thế không phải là không dùng vì có nhiều điều khi phát triển một project cũng phải cần đến. ASP.Net MVC cũng có thể làm được điều đó. Nhưng tại sao ta không kết hợp MVC, JQuery và Json để làm điều đó.  Câu hỏi là làm thế nào để làm được điều đó trong MVC.

Trong MVC các Server Control sẽ không còn như trong ASP.Net, cái còn lại bây giờ là thêm một chút code để chúng ta có thể có các chức năng tương tự dể dàng hơn nữa, sử dụng giao thức JSON cho vấn đề load dữ liệu nhẹ nhàng và dễ dàng hơn.


    
       
        
    

    #using (Html.BeginForm())
   {
       

           

                 Event Information
                


                     
                      ${Html.DropDownList("eventname", EventList)}
                


                


                     


                


                      
                


           

      

#}

Nếu bạn đang tự hỏi tại sao lựa chọn danh sách thứ hai của tôi là không tạo ra bởi lớp HtmlHelper chỉ là vì tôi không muốn phụ thêm vào nó nên tôi sử dụng jQuery. Nếu thực sự là không cần thiết khi bắt đấu làm project.

public ActionResult Events()
{
        IList events = new List();
        const int upper = 5;
        for (int i = 0; i < upper; i++)
        {
               var eventItem = new EventDto() {
               EventCode = i.ToString(),
               Eventname = string.Format("Name {0}", i)};
               events.Add(eventItem);
         }
         var eventList = new SelectList(events, "EventCode", "EventName");
         ViewData["EventList"] = eventList;
         return View();
}


Không có gì đặc biệt ở đây. Tôi chỉ cần tạo một List các sự kiện và sau đó đi qua nó để một SelectList để nó có thể được xem.

Vì vậy, trang HTML code trông như thế này:

Event Information
   

         
         
    

    

           
           
    

    

           
    


Và trang web trông như thế này:

Chức năng JsonResult

ASP.Net MVC đi kèm với bộ action cotroller khác nhau, một trong số đó JsonResult action. Giống như các ActionResult, JsonResult gửi dữ liệu trở lại view như trong trường hợp này, response được chuyển đổi thành JSON.

[AcceptVerbs(HttpVerbs.Get)]
public JsonResult EventDates(string eventCode)
{
        IList eventDates = BuildEventDates(eventCode);
        return Json(eventDates);
}

Trong function trên tôi đã viết, trước tiên tôi muốn biết nó phản ứng như thế nào trong trường hợp này. Để đáp ứng các yêu cầu "GET" tôi cần phải có tham số là AcceptVerbs với chức năng là "GET", chức năng này cần có các tham số cho các mã số sự kiện mà người dùng chọn trong danh sách, và sau đó dựa trên các thông số ứng dụng có được một List các ngày đến những ngày này bộ sưu tập (được định dạng như các chuỗi trong trường hợp này) và trả lại bằng cách gọi các JSON() function.

Chức năng jQuery:

Để có được dữ liệu cho Dropdown thứ hai, chúng ta cần phải thực hiện một cuộc gọi AJAX đến máy chủ và qua nó giá trị của Dropdown trước khi "Change".

Khi sự kiện này gọi, sau đó chúng ta có thể sử dụng $jQuery AJAX gọi. Để thực hiện một "GET" yêu cầu đến URL như vậy:…/Home/EventDates?eventCode=3. Khi bạn. Nhìn vào tiêu đề của các yêu cầu của bạn cũng thông báo rằng "Accept" attribute được thiết lập để.

application/json, text/javascript, */*.


Chú ý rằng các dữ liệu chúng tôi là phải đi qua trong yêu cầu phải có định dạng JSON Vì vậy, trong trường hợp những dữ liệu chúng ta đang đi là (eventCode: 3). Các phản ứng, chúng tôi nhận lại. Là:

[{"EventDateCode":"10/27/2009","EventDateName":"10/27/2009"},{"EventDateCode":"10/30/2009","EventDateName" :"10/30/2009"}, [{"EventDateCode":"10/27/2009","EventDateName":"10/27/2009"},{"EventDateCode":"10/30/2009","EventDateName" :"10/30/2009"},

{"EventDateCode":"11/2/2009","EventDateName":"11/2/2009"},{"EventDateCode":"11/5/2009" ,"EventDateName":"11/5/2009"}, {"EventDateCode":"11/2/2009","EventDateName":"11/2/2009"},{"EventDateCode":"11/5/2009" ,"EventDateName":"11/5/2009"},

{"EventDateCode":"11/8/2009","EventDateName":"11/8/2009"},{"EventDateCode" :"11/11/2009","EventDateName":"11/11/2009"}, {"EventDateCode":"11/8/2009","EventDateName":"11/8/2009"},{"EventDateCode" :"11/11/2009","EventDateName":"11/11/2009"},

{"EventDateCode":"11/14/2009","EventDateName":"11/14/2009" },{"EventDateCode":"11/17/2009","EventDateName":"11/17/2009"}, {"EventDateCode":"11/14/2009","EventDateName":"11/14/2009" },{"EventDateCode":"11/17/2009","EventDateName":"11/17/2009"},

{"EventDateCode":"11/20/2009","EventDateName" :"11/20/2009"}] {"EventDateCode":"11/20/2009","EventDateName" :"11/20/2009"}]

Nếu trả lời là thành công, các chức năng gọi lại bộ sưu tập sẽ được trả về và xây dựng một chuỗi các

Thứ Hai, 11 tháng 2, 2008

Cấu trúc của ASP.Net MVC


Cấu trúc thư mục mặc định của ứng dụng ASP.NET MVC gồm 3 thư mục chính:
  • Controllers
  • Models
  • Views
Như bạn thấy, chúng tôi khuyến khích việc đưa những class điều khiển vào bên trong thư mục /Controllers, những class thuộc về mô hình dữ liệu vào bên trong thư mục /Models, và những gì liên quan đến giao diện vào thư mục Views.

Mặc dù ASP.NET MVC framework không bắt buộc bạn phải luôn sử dụng cấu trúc này, nhưng đây là cấu trúc mặc định khi bạn tạo một project mới và chúng tôi luôn luôn khuyến khích việc sử dụng nó để phân chia ứng dụng. Bạn hãy sử dụng cấu trúc này ngoại trừ trường hợp bạn đề ra một lý do đủ thuyết phục để thay đổi nó.

Ánh xạ các URL vào trong class Controller

Hầu hết các web framework, như ASP, PHP, JSP, ASP.NET WebForms..., đều ánh xạ các URL vào một file template được lưu trên đĩa. Lấy ví dụ URL "/Products.aspx" hay "/Products.php" được chuyển đến file template Products.aspx hay Products.php trên đĩa cứng để xử lý. Khi một ứng dụng web nhận được HTTP Request đến web server, thì web framework sẽ chạy đoạn một code cụ thể tương ứng với nội dung của file template, và đoạn code này đóng vai trò xử lý yêu cầu do phía client gửi đến. Thông thường thì đoạn code này sẽ sinh ra HTML và đáp ứng lại phía client.

MVC Framework lại hoạt động theo một cách khác hoàn toàn, thay vì ánh xạ các URL vào các file template lưu trên đĩa, nó sẽ đưa thẳng vào các class. Những class được ánh xạ tới được gọi là "Controllers", và chúng sẽ xử lý request đến, kiểm soát dòng nhập xuất và giao diện đối với người dùng, thực thi các ứng dụng và data logic tương ứng với request. Cuối cùng, chúng sử dụng các thành phần Views để tạo HTML và đáp trả lại request.


ASP.NET MVC Framework có một bộ máy ánh xạ URL thật sự mạnh mẽ. Bộ máy này cung cấp phương pháp rất linh hoạt trong việc ánh xạ URLs sang cho Controller Classes. Bạn có thể dễ dàng định ra các quy luật, cài đặt đường đi để ASP.NET dựa vào các quy luật đường đi đó, xác định xem phải thực thi Controller nào. ASP.NET còn có khả năng phân tích URL, chuyển các thông số trong URL thành các tham số trong lời gọi hàm của Controller. Tôi sẽ viết kỹ hơn về kỹ thuật định tuyến nâng cao trong những bài blog sắp đến.

Đường đi mặc định từ ASP.NET MVC URL đến Controller Classes

Các projects ASP.NET MVC được định nghĩa sẵn một số quy luật về đường đi để bạn không phải hiệu chỉnh thêm điều gì trong khi bắt đầu làm quen với framework mới. Bạn có thể bắt đầu viết mã và sử dụng phương pháp ánh xạ URL mặc định được định nghỉa trong file Global.asax - ASP.NET Application class. File Global.asax này được tự động tạo ra từ ASP.NET MVC project template.

Phương pháp mặc định đơn giản làm nhiệm vụ ánh xạ một phần URL từ HTTP Request, lấy ví dụ /Products/, đến một class có tên theo mẫu UrlPathController, tức là URL /Products/ sẽ được chuyển đến class có tên là ProductsController.

Để xây dựng chức năng tìm duyệt sản phẩm trong ứng dụng thương mại điện tử, chúng ta thêm vào class "ProductsController" vào project. Bạn có thể sử dụng menu "Add New Item" để nhanh chóng tạo Controller class từ template:



Class ProductsController được kế thừa từ class cơ sở System.Web.MVC.Controller. Thừa kế từ class cơ sở này không phải là điều bắt buộc, tuy nhiên sẽ khá tiện lợi bởi nó có nhiều phương thức và chức năng mà ta muốn sử dụng về sau này.


Một khi chúng ta đã định nghĩa class ProductsController, ASP.NET MVC framework sẽ sử dụng nó cho tất cả các URL bắt đầu bằng "/Products/". ProductsController cũng sẽ được sử dụng bất kỳ khi nào có yêu cầu đến "/Products/Categories", "/Products/List/Beverages" và "/Products/Detail/3", là ba chức năng mà ta sẽ phải cài đặt trong ứng dụng cửa hàng này.

Trong bài blog tiếp theo tôi sẽ thêm ShoppingCartController để người dùng có thể quản lí giỏ hàng của họ. Thêm vào đó là AccountController cho phép người dùng tạo tài khoản khách hàng, đăng nhập và đăng xuất khỏi website. Tất nhiên khi đã có hai controller này rồi, thì mặc định các URL bắt đầu bằng /ShoppingCart/ và /Account/ sẽ được tự động chuyển hướng sang controller để xứ lý.

Lưu ý : ASP.NET MVC framework không yêu cầu bạn bắt buộc phải sử dụng cách đặt tên để ánh xạ URL theo mẫu như trên. Lý do duy nhất mà ứng dụng tôi đang thực hiện làm như vậy là do nó sử dụng các luật ánh xạ mặc định được tạo bởi ASP.NET MVC Project template. Nếu bạn muốn thay đổi, bạn có thể chỉnh sửa lại các luật trong class ASP.NET Application - file Global.asax. Tôi sẽ hướng dẫn làm sao cấu hình lại đường đi mới trong một bài blog khác, khi đó bạn sẽ ngạc nhiên vì sự dễ dàng và linh hoạt.

DangTrung

Tạo Một Web Application sử dụng ASP.Net MVC, Unity, NHibernate

Giới thiệu

Tôi nghĩ rằng tài liệu sẽ hữu ích cho những ai đang phát triển và đồng thời hiểu được những gì để kết hợp xây dựng một ứng dụng web được thiết kế với framework MVC của Microsoft, NHibernate O/R Mapper và Microsoft Unity, IoC framework . Tôi phải thú nhận, tôi không phải là một chuyên gia của bất cứ những công cụ nào, vì vậy tôi hoan nghênh thông tin phản hồi từ cộng đồng. Lý do để bắt đầu làm điều này, là vì không có nhiều tài liệu trên toàn bộ các công cụ này cho mình, vì vậy tôi hy vọng sẽ giúp ít được một vài điều gì dó cho những ai đang tìm hiểu về nó. Nếu bạn nghĩ rằng có những cách tiếp cận tốt hơn cho những gì tôi đang làm, hoan nghên bạn chia sẽ nó ở đây. Tôi làm điều này về cơ bản chỉ để làm giàu thêm kinh nghiệm của riêng mình và cũng giúp ích cho cộng đồng cùng tốt hơn.

Từ này sẽ có được một loạt các bài viết, không bao gồm mọi khía cạnh của ứng dụng này cùng một lúc, vì vậy nếu những gì bạn đang tìm kiếm không phải là bài viết này, tôi cũng mong bạn chia sẽ. Nhưng một vấn đề của thực tế, kể từ khi tôi tiếp cận thử nghiệm đầu tiên, tôi sẽ không cò được kinh nghiệm trong framework MVC cho đến khi một số bài viết từ bây giờ.

Thiết lập NHibernate

Trước khi tôi đề cập đến điều này, nhưng nếu bạn là người mới đến NHibernate và không biết làm thế nào để bắt đầu, Bạn nên tìm hiểu về cách thức mà Hibernate framework, các download của NHibernate có vị trí ở đây. Sau khi tải về, việc đầu tiên tôi cần làm là đưa các tập tin giản đồ NHibernate trong thư mục schema Visual Studio (thư mục của tôi nằm ở đây: C:\Program Files\Microsoft Visual Studio 9.0\ Xml\Schemas) vì vậy tôi có thể nhận được IntelliSense trên cấu hình và các file bản đồ.

Nói chung, tất cả các thư viện bên ngoài, nó rất hữu ích để đặt tất cả ở một vị trí tương đối với thư mục, hoặc chỉ bên trong giải pháp của bạn có, ví dụ, nếu bạn đang sử dụng các máy kiểm soát nguồn phát triển khác sẽ nhận các tài liệu tham khảo mà không có bất kỳ vấn đề. Vì vậy, tôi đang làm việc cùng với các ứng dụng này, và sau đó sẽ được tham khảo các NHibernate.dll trong tất cả các dự án có liên quan của tôi. Trong trường hợp của tôi, tôi chỉ sẽ có một trang Web, Core, và dự án thử nghiệm vì vậy tôi sẽ tham khảo nó bây giờ ở Core và dự án thử nghiệm. Có lẽ tôi sẽ cần phải tham khảo trong dự án web để thiết lập Thống nhất.

Điều tiếp theo, tôi sẽ cần làm là để tạo ra một tập tin cấu hình NHibernate. Một trong những khái niệm qui ướt mà NHibernate cần. Đó là, tôi tuân theo một quy ước nhất định, tôi sẽ không cần phải cấu hình các khía cạnh nhất định của NHibernate khi cài đặt nó lên. Vì vậy, nếu tôi tạo một tập tin cấu hình và đặt tên là hibernate.cfg.xml, sau đó thiết lập được xây dựng hành động để sao chép vào thư mục đầu ra, tôi sẽ không cần phải nói cho NHibernate mà tập tin cấu hình được.

Lưu ý: Tôi đã thử điều này trong một dự án của Microsoft Team Test và cho một số lý do dự án thử nghiệm sẽ không sao chép tập tin vào thư mục đầu ra vì vậy tôi đã mở đường dẫn cấu hình thức.

Đây là tập tin cấu hình đó trong thư mục gốc của dự án thử nghiệm của tôi.

      
            NHibernate.Driver.SqlClientDriver
           
               Data Source=(local);Initial Catalog=News;Persist Security Info=True;User ID=my_dev;Password=my_dev
            
            10>
            true
            NHibernate.Dialect.MsSql2005Dialect
            true
            444
            true 1, false 0, yes 'Y', no 'N'
           
      

Lưu ý là trong thẻ gốc rằng kể từ khi tôi đặt các tập tin giản đồ NHibernate trong thư mục schema Visual Studio Tôi đã có quyền truy cập vào IntelliSense. Bạn có thể xem là tài sản thiết lập các định nghĩa ở đây, và đây cũng là các nút quan trọng
  • Các tài sản show_sql là sẽ có ích khi gỡ lỗi vì vậy tôi có thể thấy các lệnh SQL. Tôi sẽ tắt tính năng này trong production vì nó quá tốn kém.
  • Các dialect là sẽ nói cho NHibernate biết cụ thể cơ sở dữ liệu ngôn ngữ và phiên bản nào là sẽ dịch các SQL vào.
  • Lập mapping files NHibernate, nơi mapping files và các class được đặt.
Một khi các tập tin cấu hình được tạo ra,sau đó bạn có thể gọi nó từ mã của bạn và tạo ISessionFactory. Tôi sẽ nói về cách tiếp cận của tôi sau này trong bài khác, nhưng thực chất là vì ISessionFactory tạo ra và cũng có một số lo ngại với việc tạo ra nó; tôi sẽ tạo ra nó một cách khác nhau trong dự án thử nghiệm trong các dự án web. Trong cả hai trường hợp, tôi sẽ thực hiện một giao diện tôi tạo ra cách gọi ISessionFactoryManager. Giao diện này, tính tới nay, sẽ có một phương pháp gọi là GetSessionFactory. Các mã trong dự án thử nghiệm của tôi trông như thế này.

using News.Core.Data;
using NHibernate;
using NHibernate.Cfg;
namespace News.Web.Tests
{
       internal class TestSessionFactoryManager : ISessionFactoryManager
      {
              public ISessionFactory GetSessionFactory()
             {
                    string path = @"C:\Projects\News\Src\News.Web.Tests\hibernate.cfg.xml";
                     var cfg = new Configuration();
                    cfg.Configure(path);
                    return cfg.BuildSessionFactory();
              }
       }
}

Lưu ý: Nếu muốn, bạn cũng có thể thêm các thuộc tính vào thời gian chạy.
Ví dụ, chuỗi kết nối của tôi được lưu trữ ở một nơi bí mật, tôi có thể làm nó và đặt nó vào ISessionFactory với code sau đây. Nó chỉ phải được thực hiện trước khi BuildSessionFactory được gọi, bởi vì một khi gọi, nó không thể thay đổi.

cfg.Properties.Add("connection.connection_string", connectionString );

Một khi các phương pháp này được gọi là BuildSessionFactory, Nhibernate sẽ lấy tập tin config, và cũng có các mapping file (Tôi sẽ thảo luận sau) và trả về session factory. Bây giờ có thể mở session để cơ sở dữ liệu và cơ sở dữ liệu CRUD làm bất cứ điều gì bạn cần làm.

Mapping Tables đến Classes :

Ví dụ tôi sẽ có hai bảng với giản đồ sau đây:


Đối với bài này, tôi chỉ đang lo lắng về News table. Một lần nữa, bằng cách sử dụng quy ước về cấu hình, tôi đã mapping file tên NewsItemDto.hbm.xml vì vậy tôi không cần phải nói cho NHibernate, nơi nó được tạo. Tôi cần phải chắc chắn tập tin này là một nguồn tài nguyên nhúng, do đó, nó có thể được tham chiếu. Nội dung của tập tin này trông như thế này:

 
              
                    
                          
                    
                    
                    
                    
                   
                    
                    
                   
                   
                   
           

Một lần nữa, gốc tài liệu tham khảo giản đồ lập bản đồ NHibernate mà tôi sẽ đưa cho IntelliSense. Bạn có thể xem tất cả các cài đặt tài sản ở đây. Trong class, tôi nói cho nó namespace và tên assembly, nơi có vị trí. Các ID nhận dạng các khóa chính của bảng. Bằng cách đặt các thuộc tính máy phát điện để có nguồn gốc, tôi nói cho NHibernate rằng lĩnh vực này là một lĩnh vực nhận dạng và giá trị được tạo ra bởi cơ sở dữ liệu.

Đây là Class Code:

public class NewsItemDto
{
        public virtual long NewsId { get; set; }
        public virtual long AuthorId { get; set; }
        public virtual DateTime DateAdded { get; set; }
        public virtual DateTime DatePublished { get; set; }
        public virtual DateTime DateUpdated { get; set; }
        public virtual string Title { get; set; }
        public virtual string ShortDescription { get; set; }
        public virtual string Body { get; set; }
        public virtual bool IsFrontPage { get; set; }
        public virtual bool IsPublished { get; set; }
}

Chúc bạn thành công.
DangTrung.