Thứ Hai, 11 tháng 2, 2008

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.

Không có nhận xét nào:

Đăng nhận xét