Kênh video học Quản Trị Mạng  -  Kênh TV và video học lập trình.
    • Bài 8 - DYNAMIC DATA VỚI ADO.NET Entity Framework

      Bài này giới thiệu cách xây dựng ứng dụng Dynamic Data với ADO.NET Entity Framework. 1. Xây dựng ứng dụng Dynamic Data với ADO.NET Entity Framework 1.1. Tạo Project Dynamic Data Để bắt đầu, File→New Web Site và chọn “Dynamic Data Entities Web Site” hay “Dynamic Data Web Site”. Ở đây chúng ta dùng Dynamic Data với ADO.NET Entity Framwork nên chọn “Dynamic Data Entities Web Site” (Hình 1).
      Hình 1: Tạo Project Dynamic Data với ADO.NET Entity Framework
      Trong Project này chúng ta đặt tên là Vi_du_8, ngôn ngữ là Visual C# sau đó bấm “OK”. Khi đã tạo xong, bạn sẽ thấy một số Folder/File được đưa vào trong Solution Explorer (Hình 2).
      Hình 2: Các Folder và File trong Dynamic
      Trong đó sẽ có một Folder có tên là DynamicData, bên trong chứa một số các Folder khác, và trong mỗi Folder con này sẽ chứa các UserControl và các trang ASP.NET. 1.2. Xây dựng Cơ sở dữ liệu cho Project Tư Folder “App_Data” trong “Solution Explore” click phai chuôt chon “Add New Item” (Hình 3).
      Hình 3: Tạo Cơ sở dữ liệu
      [LEFT]Chọn “SQL Server Database”, trong ví dụ này đặt tên cho CSDL là “My_Database.mdf”, chọn ngôn ngữ là “Visual C#”, sau đó bấm “Add” (Hình 4). [CENTER] Hình 4: SQL Server Database [LEFT]Để tạo Table cho “My_Database”, trong “Database Explore” chúng click chuột phải vào Folder “Table” chọn “Add New Table”. Trong ví dụ này chúng ta sẽ tạo 2 bảng: SanPham gồm các trường: Id, TenSanPham, DonGia, SoLuong, LoaiSanPham (Hình 5).
      Hình 5: Bảng SanPham trong CSDL My_Database.mdf
      LoaiSanPham gồm các trường: Id, TenLoaiSanPham (Hình 6).
      Hình 6: Bảng LoaiSanPham trong CSDL My_Database.mdf
      Chúng ta cũng có thể sử dụng CSDL đã có. Để sử dụng CSDL đã có từ Folder “App_Data” trong “Solution Explore” click phai chuôt chon “Add Existing Item” (Hình 7).
      Hình 7: Thêm Cơ sở dữ liệu đã có
      Trong hộp thoại “Add Existing Item” chọn CSDL muốn thêm vào Project, sau đó bấm “Add” (hình 8).
      Hình 8: Chọn Cơ sở dữ liệu đã có
      1.3. Tạo Data Model với ADO.NET Entity Framework Trong ví dụ này chúng ta dùng ADO.NET Entity Framework để truy cập vào CSDL My_Database.mdf. Để tạo Data Model, trong “Solution Explore” click chuột phải chọn “Add New Item” (Hình 9).
      Hình 9
      Trong “Add New Item” (Hình 10) chọn “ADO.NET Entity Data Model”, đặt tên tệp là “My_Modle.edmx”, chọn ngôn ngữ là “Visual C#”, sau đó bấm vào “Add” .
      Hình 10: Tạo ADO.NET Entity Data Model
      Sau khi bấm “Add” sẽ xuất hiện một thông báo khuyên chúng ta nên đặt các file kiểu (ADO.NET Entity Data Model) vào trong thư mục “App_Code” của Project. Chúng ta sẽ bấm “Yes” để các file “My_Model.edmx” sẽ được chứa trong thư mục “App_Code”. Khi đó sẽ xuất hiện hộp thoại “Entity Data Model Wizard” (hình 11). Chúng ta chọn “Generate from database”, rồi bấm “Next” sẽ xuất hiện giao diện (hình 12) chọn CSDL “My_Database.mdf” tiếp tục bấm “Next” sẽ xuất hiện giao diện (hình 13).
      Hình 11 Hình 12 Hình 13
      Trong giao diện hình14, chọn đánh dấu vào các bảng trong “Tables” sau đó bấm “Finish”. Tiếp theo chúng ta mở file “My_Model.edmx” trong thư mực “App_Code”. Chúng ta sẽ tạo liên kết giữa trường Id của bảng LoaiSanPham với trường LoaiSanPham của bảng SanPham. Click chuột phải chọn Add→Association (hình 14) sẽ xuất hiện “Add Association” (hình 15), chúng ta chọn như hình 16 rồi bấm OK.
      Hình 14 Hình 15
      Sau đó click chuột phải chọn “Mapping Details” và chọn như hình 16. Ở đây chúng ta chọn quan hệ 1-nhiều giữa bảng LoaiSanPham và SanPham.
      Hình 16: Tạo liên kết giữa bảng LoaiSanPham với bảng SanPham
      1.4. Đăng ký Data Model Sau khi tạo ra DataModel, chúng ta mở tệp “My_Model.Designer.cs”, chương trình đã tạo cho chúng ta một namespace có tên là My_DatabaseModel và trong namespace My_DatabaseModel có một lớp My_DatabaseEntities.
      public partial class My_DatabaseEntities :global::System.Data.Objects.ObjectContex 
      
      Chúng ta phải đăng ký My_DatabaseEntities với hệ thống DynamicData. Mở file Global.asax, thêm   Sửa:                              
      //model.RegisterContext(typeof(YourDataContextType), new ContextConfiguration() { ScaffoldAllTables = false }); 
      
                  Thành:                             
      model.RegisterContext(typeof (My_DatabaseEntities), new ContextConfiguration() { ScaffoldAllTables = true });
      
                 Khi đó chúng ta được file Golobal.asax như sau:Chúng ta vào Deburg→StartDebugging (hoặc F5) để chạy  thử chương trình. Kết quả khi chạy chương trình (Hình 17). 
      Hình 17
      Khi click vào LoaiSanPhams kết quả như hình 18.
      Hình 18
      Khi click vào SanPhams kết quả như hình 19.
      Hình 19
      1.5. Thêm Custom Metadata vào Model Để thêm tùy biến các mục, chúng ta cần tạo lớp Metadata để nó cung cấp cho hệ thống Dynamic Data thông tin về các thực thể. Đầu tiên bạn cần tạo thêm một lớp partial với cùng tên của lớp entity trong mô hình dữ liệu, sau đó muốn thay đổi thuộc tính lên lớp này phải chỉ ra lớp Metadata cho lớp này. Trong ví dụ này chúng ta sẽ 2 lớp partial có tên là: LoaiSanPham và SanPham. Để thêm 2 lớp này chúng ta làm như sau: Click chuột phải vào “Add_Code” chọn “Add New Item”, trong hộp thoại “Add New Item”, chọn “Class”, đặt tên cho file là “MyClass.cs”, chọn ngôn ngữ là “Visual C#”, sau đó bấm “Add” (Hình 20).
      Hình 20: Thêm file MyClass.cs
      Mở file “MyClass.cs” khai báo thêm các namespace sau:
      using System.Web.DynamicData; using System.ComponentModel.DataAnnotations; using System.ComponentModel; 
      
        Thêm 2 lớp  partial  có tên là:  LoaiSanPham,  SanPham  và tên lớp  của  MetadataType  trong namespace My_DatabaseModel.                             
      namespace My_DatabaseModel {       [MetadataType(typeof(LoaiSanPham_Metadata))]      public partial class LoaiSanPham      {      public class LoaiSanPham_Metadata          {      }      }      [MetadataType(typeof(SanPham_Metadata))]      public partial class SanPham      {         public class SanPham_Metadata          {          }             } }
      
      Trong ví dụ này sử dụng các thuộc tính TableName, DisplayName để thay đổi giao diện hiện thị cho  2 bảng LoaiSanPham và SanPham. Sử dụng Required để kiểu tra việc nhập dữ liệu cho trường “SoLuong” và “DonGia” của bảng SanPham. Sử dụng ScaffoldColumn để ẩn trường “Id” của 2 bảng.                            
      using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.DynamicData; using System.ComponentModel.DataAnnotations; using System.ComponentModel; namespace My_DatabaseModel {     ///      /// Thay đổi cho các thuộc tính cho 2 bảng SanPham và LoaiSanPham     ///      [MetadataType(typeof(LoaiSanPham_Metadata))]     public partial class LoaiSanPham     {         partial void OnTenLoaiSanPhamChanging(string value)         {             if (Char.IsLower(value[0]))//Kiểm tự đầu tiên phải có phải là chữ hoa             {                 throw new ValidationException("Tên loại sản phẩm ký tự đầu tiên phải là chữ hoa!");             }         }          [TableName("Loại sản phẩm")]//Sửa lại tên bảng "LoaiSanPham" thành "Loại sản phẩm"         public class LoaiSanPham_Metadata         {             [ScaffoldColumn(false)]//// Ẩn cột Id             public object Id { get; set; }              [DisplayName("Tên loại sản phẩm")]//Sửa lại tên hiển thị cho trường TenLoaiSanPham             public object TenLoaiSanPham { get; set; }              [DisplayName("Sản phẩm")]             public object SanPham { get; set; }          }     }      [MetadataType(typeof(SanPham_Metadata))]     public partial class SanPham     {         partial void OnTenSanPhamChanging(string value)         {             if (Char.IsLower(value[0]))//Kiểm tự đầu tiên phải có phải là chữ hoa             {                 throw new ValidationException("Tên sản phẩm ký tự đầu tiên phải là chữ hoa!");             }         }          [TableName("Sản phẩm")]//Sửa lại tên bảng "SanPham" thành "Sản phẩm"         public class SanPham_Metadata         {             [ScaffoldColumn(false)]// Ẩn cột Id             public object Id { get; set; }              [DisplayName("Tên sản phẩm")]//Sửa lại tên hiển thị cho trường TenLoaiSanPham             public object TenSanPham { get; set; }              [DisplayName("Số lượng")]             [Required]             [Range(0, 300)]//Nhập số lượng trong khoảng từ 0 đến 300             public object SoLuong { get; set; }              [DisplayName("Đơn giá")]             [Required]             [Range(100000, 3000000000)]//Nhập đơn giá trong khoảng từ 100.000 đến 3.000.000.000             public object DonGia { get; set; }              [DisplayName("Loại sản phẩm")]             public object LoaiSanPham { get; set; }         }     } } 
      
      Để  sửa  lại đổi giao diện của  trang Master chúng  ta mở  file “Site.master”. Ví dụ chúng  ta một  số nội dung do chương trình tạo ra bằng tiếng Anh và thay bằng tiếng Việt. Sửa:                                  

      Dynamic Data Site

      Thành:

      Dynamic Data VỚI ADO.NET Entity Framework

      Sửa:
       Back to home page Thành:                                    
      Trở về trang chủ    Trong file “Details.aspx” sửa một số giao diện tiếng Anh và thay bằng tiếng Việt.                             

      Chi tiết một bản ghi của bảng

      Trong file “Edit.aspx” sửa lại
      Bản tin này đuợc lấy từ trong diễn đàn: Bài 8 - DYNAMIC DATA VỚI ADO.NET Entity Framework Gửi bởi hoangipmac Xem bài gốc

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110