ASP.NET 3.5 - Bài 8: Dynamic Data với ADO.NET Entity Framework

1. Xây dựng ứng dụng Dynamic Data với ADO.NET Entity Framework . 2

1.1. Tạo Project Dynamic Data . 2

1.2. Xây dựng Cơ sở dữ liệu cho Project . 3

1.3. Tạo Data Model với ADO.NET Entity Framework . 6

1.4. Đăng ký Data Model . 8

1.5. Thêm Custom Metadata vào Model . 10

2. Câu hỏi ôn tập . 15

3. Tài liệu tham khảo . 15

pdf15 trang | Chuyên mục: ASP.NET | Chia sẻ: dkS00TYs | Lượt xem: 2110 | Lượt tải: 2download
Tóm tắt nội dung ASP.NET 3.5 - Bài 8: Dynamic Data với ADO.NET Entity Framework, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
rate-
page 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 9 
 // 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 quả khi chạy chương 
trình (Hình 17). 
 Khi click vào LoaiSanPhams kết quả như hình 18. Khi click vào SanPhams kết quả như hình 19. 
Hình 17 
Hình 18 
Hình 19 
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 10 
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). 
 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. 
Hình 20: Thêm file MyClass.cs 
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 11 
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 
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 12 
 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: 
 <img alt="Back to home page" runat="server" 
src="DynamicData/Content/Images/back.gif" />Back to home page 
Thành: 
 <img alt="Trở về trang chủ" runat="server" 
src="DynamicData/Content/Images/back.gif" />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 <%= 
table.DisplayName %> 
 <asp:DetailsView ID="DetailsView1" runat="server" 
DataSourceID="DetailsDataSource" OnItemDeleted="DetailsView1_ItemDeleted" 
 CssClass="detailstable" FieldHeaderStyle-CssClass="bold" > 
 <asp:HyperLink ID="EditHyperLink" runat="server" 
 NavigateUrl='<%# 
table.GetActionPath(PageAction.Edit, GetDataItem()) %>' 
 Text="Sửa" /> 
 <asp:LinkButton ID="DeleteLinkButton" runat="server" 
CommandName="Delete" CausesValidation="false" 
 OnClientClick='return confirm("Bạn có chắc chắn xóa 
bản ghi này không?");' 
 Text="Xóa" /> 
 Trong file “Edit.aspx” sửa lại <asp:DetailsView ID="DetailsView1" như sau: 
 <asp:DetailsView ID="DetailsView1" runat="server" 
DataSourceID="DetailsDataSource" DefaultMode="Edit" 
 AutoGenerateEditButton="False" 
OnItemCommand="DetailsView1_ItemCommand" OnItemUpdated="DetailsView1_ItemUpdated" 
 CssClass="detailstable" FieldHeaderStyle-CssClass="bold"> 
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 13 
 <asp:Button ID="UpdateLinkButton" runat="server" 
CommandName="Update" CausesValidation="false" 
 Text="Cập nhật" /> 
 <asp:Button ID="Button1" runat="server" 
CommandName="Cancel" CausesValidation="false" 
 Text="Hủy bỏ" /> 
 Trong file “Insert.aspx” sửa lại <asp:DetailsView ID="DetailsView1" như sau: 
 <asp:DetailsView ID="DetailsView1" runat="server" 
DataSourceID="DetailsDataSource" DefaultMode="Insert" 
 AutoGenerateInsertButton="False" 
OnItemCommand="DetailsView1_ItemCommand" OnItemInserted="DetailsView1_ItemInserted" 
 CssClass="detailstable" FieldHeaderStyle-CssClass="bold"> 
 <asp:Button ID="InsertLinkButton" runat="server" 
CommandName="Insert" Text="Thêm mới" /> 
 <asp:Button ID="Button1" runat="server" 
CommandName="Cancel" CausesValidation="false" Text="Hủy bỏ" /> 
 Trong file “List.aspx” sửa lại <asp:GridView ID="GridView1" như sau: 
 <asp:GridView ID="GridView1" runat="server" 
DataSourceID="GridDataSource" 
 AllowPaging="True" AllowSorting="True" CssClass="gridview"> 
 <asp:HyperLink ID="EditHyperLink" runat="server" 
 NavigateUrl='<%# 
table.GetActionPath(PageAction.Edit, GetDataItem()) %>' 
 Text="Sửa" /> <asp:LinkButton 
ID="DeleteLinkButton" runat="server" CommandName="Delete" 
 CausesValidation="false" Text="Xóa" 
 OnClientClick='return confirm("Bạn có chắc chắn xóa 
bản nghi này không?");' 
 /> <asp:HyperLink ID="DetailsHyperLink" 
runat="server" 
 NavigateUrl='<%# 
table.GetActionPath(PageAction.Details, GetDataItem()) %>' 
 Text="Chi tiết" /> 
 Không có dữ liệu trong bảng! 
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 14 
Bây giờ chúng ta chạy thử chương trình. Các giao diện đã được sửa thành tiếng Việt. 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 file 
“Defautl.axpx” (Hình 21). 
Khi click vào “Loại sản phẩm” kết quả như hình 22 hoặc click vào “Sản phẩm” kết quả như hình 23. 
Hình 21: Trang chủ của Vi_du_8 
Hình 22: Giao diện của bảng LoaiSanPham 
Hình 23: Giao diện của bảng SanPham 
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 15 
2. Câu hỏi ôn tập 
1. Các tính năng của Dynamic Data? 
Trả lời: 
 Web Scaffolding để tạo ra một ứng dụng web dựa trên các lược đồ cơ bản của cơ sở dữ liệu. 
Dynamic Data scaffolding có thể tạo ra một chuẩn UI (User Interface – Giao diện người dùng) 
từ các mô hình dữ liệu. 
 Đầy đủ các thao tác (tạo, cập nhật, xóa bỏ, hiển thị) cho việc truy cập dữ liệu truy cập dữ liệu, 
các thao tác về quan hệ giữa các bảng và kiểm tra tính hợp lệ của dữ liệu. 
 Tự động hỗ quan các quan hệ khóa ngoài (foreign-key). Dynamic Data phát hiện ra các quan hệ 
giữa các bảng và từ đó tạo ra các giao diện người dùng trên các bảng quan hệ. 
 Khả năng tùy chỉnh các UI. 
 Khả năng tùy chỉnh tính hợp lệ cho các trường dữ liệu. 
2. Dynamic Data hỗ trợ các các mô hình dữ liệu nào? 
Trả lời: 
Dynamic Data hỗ trợ 2 mô hình dữ liệu LINQ to SQL và ADO.NET Entity Framework. 
3. Các bước cơ bản xây dựng Dynamic Data với ADO.NET Entity Framework 
Trả lời: 
 Tạo project Dynamic Data ADO.NET Entity Framework 
 Xây dựng Cơ sở dữ liệu 
 Tạo Data Model với ADO.NET Entity Framework 
 Đăng ký DataModel với file Global.asax 
 Thêm Custom Metadata vào Model 
3. Tài liệu tham khảo 
1. Using ASP.NET Dynamic Data, URL:  
2. Microsoft ASP.NET, URL:  
3. ScottGu's Blog, URL: 
net-dynamic-data-asp-net-ajax-asp-net-mvc-visual-studio-silverlight-wpf.aspx 

File đính kèm:

  • pdfASP.NET 3.5 - Bài 8_Dynamic Data với ADO.NET Entity Framework.pdf
Tài liệu liên quan