Để 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). Trong Project này chúng ta đặt tên là Vi_du_8, ngôn ngữ là Visual C# sau đó bấm “OK”. Hình 1: Tạo Project Dynamic Data với ADO.NET Entity Framework
MỤC LỤC Xây dựng ứng dụng Dynamic Data với ADO.NET Entity Framework 1.1 Tạo Project Dynamic Data 1.2 Xây dựng Cơ sở liệu cho Project 1.3 Tạo Data Model với ADO.NET Entity Framework 1.4 Đăng ký Data Model 1.5 Thêm Custom Metadata vào Model 10 Câu hỏi ôn tập 15 Tài liệu tham khảo 15 Bài số DYNAMIC DATA VỚI ADO.NET Entity Framework Bài giới thiệu cách xây dựng ứng dụng Dynamic Data với ADO.NET Entity Framework 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 chọn “Dynamic Data Entities Web Site” hay “Dynamic Data Web Site” Ở 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 đặt tên Vi_du_8, ngơn ngữ Visual C# sau bấm “OK” Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework Khi tạo xong, bạn thấy số Folder/File đưa vào Solution Explorer (Hình 2) Trong có Folder có tên DynamicData, bên chứa số Folder khác, Folder chứa UserControl trang ASP.NET 1.2 Xây dựng Cơ sở liệu cho Project Hình 2: Các Folder File Dynamic Data Từ Folder “App_Data” “Solution Explore” click phải ch ̣t cho ̣n “Add New Item” (Hình 3) Hình 3: Tạo Cơ sở liệu Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework Chọn “SQL Server Database”, ví dụ đặt tên cho CSDL “My_Database.mdf”, chọn ngôn ngữ “Visual C#”, sau bấm “Add” (Hình 4) Hình 4: SQL Server Database Để tạo Table cho “My_Database”, “Database Explore” chúng click chuột phải vào Folder “Table” chọn “Add New Table” Trong ví dụ tạo bảng: SanPham gồm trường: Id, TenSanPham, DonGia, SoLuong, LoaiSanPham (Hình 5) LoaiSanPham gồm trường: Id, TenLoaiSanPham (Hình 6) Hình 5: Bảng SanPham CSDL My_Database.mdf Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework Hình 6: Bảng LoaiSanPham CSDL My_Database.mdf Chúng ta sử dụng CSDL có Để sử dụng CSDL có từ Folder “App_Data” “Solution Explore” click phải chuô ̣t cho ̣n “Add Existing Item” (Hình 7) Hình 7: Thêm Cơ sở 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ở liệu có Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 1.3 Tạo Data Model với ADO.NET Entity Framework Trong ví dụ dùng ADO.NET Entity Framework để truy cập vào CSDL My_Database.mdf Để tạo Data Model, “Solution Explore” click chuột phải chọn “Add New Item” (Hình 9) Hình Trong “Add New Item” (Hình 10) chọn “ADO.NET Entity Data Model”, đặt tên tệp “My_Modle.edmx”, chọn ngôn ngữ “Visual C#”, sau bấm vào “Add” Hình 10: Tạo ADO.NET Entity Data Model Classes Sau bấm “Add” xuất thông báo khuyên nên đặt file kiểu (ADO.NET Entity Data Model) vào thư mục “App_Code” Project Chúng ta bấm “Yes” để file “My_Model.edmx” chứa thư mục “App_Code” Khi xuất hộp thoại “Entity Data Model Wizard” (hình 11) Chúng ta chọn “Generate from database”, bấm “Next” xuất giao diện (hình 12) chọn CSDL “My_Database.mdf” tiếp tục bấm “Next” xuất giao diện (hình 13) Hình 11 Hình 12 Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework Hình 13 Trong giao diện hình14, chọn đánh dấu vào bảng “Tables” sau bấm “Finish” Tiếp theo mở file “My_Model.edmx” thư mực “App_Code” Chúng ta tạo liên kết trường Id bảng LoaiSanPham với trường LoaiSanPham bảng SanPham Click chuột phải chọn Add→Association (hình 14) xuất “Add Association” (hình 15), chọn hình 16 bấm OK Hình 14 Hình 15 Sau click chuột phải chọn “Mapping Details” chọn hình 16 Ở chọn quan hệ 1nhiều bảng LoaiSanPham SanPham Hình 16: Tạo liên kết bảng LoaiSanPham với bảng SanPham Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 1.4 Đăng ký Data Model Sau tạo DataModel, mở tệp “My_Model.Designer.cs”, chương trình tạo cho namespace có tên My_DatabaseModel namespace My_DatabaseModel có 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 file Golobal.asax sau: public static void RegisterRoutes(RouteCollection routes) { MetaModel model = new MetaModel(); // IMPORTANT: DATA MODEL REGISTRATION // Uncomment this line to register LINQ to SQL classes or an ADO.NET Entity Data // model for ASP.NET Dynamic Data Set ScaffoldAllTables = true only if you are sure // that you want all tables in the data model to support a scaffold (i.e templates) // view To control scaffolding for individual tables, create a partial class for // the table and apply the [Scaffold(true)] attribute to the partial class // Note: Make sure that you change "YourDataContextType" to the name of the data context // class in your application model.RegisterContext(typeof(My_DatabaseEntities), new ContextConfiguration() { ScaffoldAllTables = true }); // The following statement supports separate-page mode, where the List, Detail, Insert, and // Update tasks are performed by using separate pages To enable this mode, uncomment the following // route definition, and comment out the route definitions in the combinedpage mode section that follows routes.Add(new DynamicDataRoute("{table}/{action}.aspx") { Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }), Model = model }); // The following statements support combined-page mode, where the List, Detail, Insert, and // Update tasks are performed by using the same page To enable this mode, uncomment the // following routes and comment out the route definition in the separatepage mode section above //routes.Add(new DynamicDataRoute("{table}/ListDetails.aspx") { // Action = PageAction.List, Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework // ViewName = "ListDetails", // Model = model //}); //routes.Add(new DynamicDataRoute("{table}/ListDetails.aspx") { // Action = PageAction.Details, // ViewName = "ListDetails", // Model = model //}); } void Application_Start(object sender, EventArgs e) { RegisterRoutes(RouteTable.Routes); } Chúng ta vào Deburg→StartDebugging (hoặc F5) để chạy thử chương trình Kết chạy chương trình (Hình 17) Hình 17 Khi click vào LoaiSanPhams kết hình 18 Khi click vào SanPhams kết hình 19 Hình 18 Hình 19 Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 1.5 Thêm Custom Metadata vào Model Để thêm tùy biến mục, cần tạo lớp Metadata để cung cấp cho hệ thống Dynamic Data thông tin thực thể Đầu tiên bạn cần tạo thêm lớp partial với tên lớp entity mơ hình liệu, sau muốn thay đổi thuộc tính lên lớp phải lớp Metadata cho lớp Trong ví dụ lớp partial có tên là: LoaiSanPham SanPham Để thêm lớp làm sau: Click chuột phải vào “Add_Code” chọn “Add New Item”, hộp thoại “Add New Item”, chọn “Class”, đặt tên cho file “MyClass.cs”, chọn ngôn ngữ “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 namespace sau: using System.Web.DynamicData; using System.ComponentModel.DataAnnotations; using System.ComponentModel; Thêm lớp partial có tên là: LoaiSanPham, SanPham tên lớp MetadataType 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ụ sử dụng thuộc tính TableName, DisplayName để thay đổi giao diện thị cho bảng LoaiSanPham SanPham Sử dụng Required để kiểu tra việc nhập liệu cho trường “SoLuong” “DonGia” bảng SanPham Sử dụng ScaffoldColumn để ẩn trường “Id” bảng Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 10 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 thuộc tính cho bảng SanPham LoaiSanPham /// [MetadataType(typeof(LoaiSanPham_Metadata))] public partial class LoaiSanPham { partial void OnTenLoaiSanPhamChanging(string value) { if (Char.IsLower(value[0]))//Kiểm tự phải có phải chữ hoa { throw new ValidationException("Tên loại sản phẩm ký tự phải 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ự phải có phải chữ hoa { throw new ValidationException("Tên sản phẩm ký tự phải 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 khoảng từ đến 300 Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 11 public object SoLuong { get; set; } [DisplayName("Đơn giá")] [Required] [Range(100000, 3000000000)]//Nhập đơn giá 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 trang Master mở file “Site.master” Ví dụ số nội dung chương trình tạo tiếng Anh thay 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ở trang chủ Trong file “Details.aspx” sửa số giao diện tiếng Anh thay tiếng Việt Chi tiết ghi bảng Trong file “Edit.aspx” sửa lại