MỤC LỤC 
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
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 2 
Bài số 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). 
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
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 3 
Hình 2: Các Folder và File trong Dynamic Data 
Khi đã tạo xong, bạn sẽ thấy một số Folder/File được đưa vào trong Solution Explorer (Hình 2). 
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 phải chuột chọn “Add New Item” (Hình 3). 
Hình 3: Tạo Cơ sở dữ liệu
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 4 
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). 
Để 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). 
LoaiSanPham gồm các trường: 
Id, TenLoaiSanPham (Hình 6). 
Hình 4: SQL Server Database 
Hình 5: Bảng SanPham trong CSDL My_Database.mdf
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 5 
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 phải chuột chọn “Add Existing Item” (Hình 7). 
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ó 
Hình 6: Bảng LoaiSanPham trong CSDL My_Database.mdf 
Hình 7: Thêm Cơ sở dữ liệu đã có
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 6 
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). 
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” . 
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 10: Tạo ADO.NET Entity Data Model Classes 
Hình 9 
Hình 11 
Hình 12
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 7 
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. 
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 13 
Hình 15 
Hình 14 
Hình 16: Tạo liên kết giữa bảng LoaiSanPham với bảng SanPham
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 8 
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 <%@ Import Namespace="My_DatabaseModel" %> 
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: <%@ Application Language="C#" %> <%@ Import Namespace="System.Web.Routing" %> <%@ Import Namespace="System.Web.DynamicData" %> <%@ Import Namespace="My_DatabaseModel" %> <script RunAt="server"> 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 combined- page 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 separate- 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); } </script> 
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 { /// <summary> /// Thay đổi cho các thuộc tính cho 2 bảng SanPham và LoaiSanPham /// </summary> [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: <h1><span class="allcaps">Dynamic Data Site</span></h1> 
Thành: <h1 style="font-family:Times New Roman"><span class="allcaps">Dynamic Data VỚI ADO.NET Entity Framework</span></h1> 
Sửa: <a runat="server" href="~/"><img alt="Back to home page" runat="server" src="DynamicData/Content/Images/back.gif" />Back to home page</a> </div> 
Thành: <a runat="server" href="~/"><img alt="Trở về trang chủ" runat="server" src="DynamicData/Content/Images/back.gif" />Trở về trang chủ</a> 
Trong file “Details.aspx” sửa một số giao diện tiếng Anh và thay bằng tiếng Việt. <h2 style="font-family:Times New Roman">Chi tiết một bản ghi của bảng <%= table.DisplayName %></h2> 
<asp:DetailsView ID="DetailsView1" runat="server" DataSourceID="DetailsDataSource" OnItemDeleted="DetailsView1_ItemDeleted" CssClass="detailstable" FieldHeaderStyle-CssClass="bold" > <Fields> <asp:TemplateField> <ItemTemplate> <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" /> </ItemTemplate> </asp:TemplateField> </Fields> </asp:DetailsView> 
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"> <Fields>
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 13 
<asp:TemplateField> <ItemTemplate> <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ỏ" /> </ItemTemplate> </asp:TemplateField> </Fields> </asp:DetailsView> 
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"> <FieldHeaderStyle CssClass="bold" /> <Fields> <asp:TemplateField> <ItemTemplate> <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ỏ" /> </ItemTemplate> </asp:TemplateField> </Fields> </asp:DetailsView> 
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"> <Columns> <asp:TemplateField> <ItemTemplate> <asp:HyperLink ID="EditHyperLink" runat="server" NavigateUrl='<%# table.GetActionPath(PageAction.Edit, GetDataItem()) %>' Text="Sửa" />&nbsp;<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?");' />&nbsp;<asp:HyperLink ID="DetailsHyperLink" runat="server" NavigateUrl='<%# table.GetActionPath(PageAction.Details, GetDataItem()) %>' Text="Chi tiết" /> </ItemTemplate> </asp:TemplateField> </Columns> <PagerStyle CssClass="footer"/> <PagerTemplate> <asp:GridViewPager runat="server" /> </PagerTemplate> <EmptyDataTemplate> Không có dữ liệu trong bảng! </EmptyDataTemplate> </asp:GridView>
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: http://msdn.microsoft.com/en-us/library/cc488545.aspx 
2. Microsoft ASP.NET, URL: http://www.asp.net/DynamicData/ 
3. ScottGu's Blog, URL: http://weblogs.asp.net/scottgu/archive/2008/12/02/dec-2nd-links-asp-net-asp- net-dynamic-data-asp-net-ajax-asp-net-mvc-visual-studio-silverlight-wpf.aspx

More Related Content

PDF
Asp.net 3.5 _7
DOCX
Trong bài viết hôm nay
PDF
Bài 7: Đối tượng Data Source -Đóng gói ứng dụng - Giới thiệu các kĩ thuật lập...
PDF
Bài 7: Lập trình với CSDL – Sử dụng DESIGNER & Triển khai ứng dụng - Lập trìn...
PDF
Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...
PPT
01 chuong 1 - gioi thieu ado.net va ket noi den csdl
PDF
01 tong-quan-ado
PDF
Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...
Asp.net 3.5 _7
Trong bài viết hôm nay
Bài 7: Đối tượng Data Source -Đóng gói ứng dụng - Giới thiệu các kĩ thuật lập...
Bài 7: Lập trình với CSDL – Sử dụng DESIGNER & Triển khai ứng dụng - Lập trìn...
Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...
01 chuong 1 - gioi thieu ado.net va ket noi den csdl
01 tong-quan-ado
Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...

What's hot (18)

PDF
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
PDF
Gt bt access
DOCX
Mô hình 3 lớp trong C#
PDF
Bài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
DOC
6860590 -phn-mm
PDF
Lập trình web asp.net MVC
PDF
Giao trinh access_2003
DOC
Giaotrinhaccess
PDF
Aspnet 3.5 _02
PPT
Chuong 07_ gắng kết dữ liệu asp.net
PDF
Hdth07 ltudql02-linq-ep1
PDF
Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...
PDF
Mo hinh-3-lop
PDF
Bài 6: Điều khiển DetailsView, FormView, ListView, DataPager
PDF
Hdth08 ltudql02-linq
PDF
Giao trinh he quan tri csdl
PDF
Mvc4 seminar - hoclaptrinhweb.com - Tài liệu Nhất Nghệ
PDF
Bai giang-access-2007
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Gt bt access
Mô hình 3 lớp trong C#
Bài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
6860590 -phn-mm
Lập trình web asp.net MVC
Giao trinh access_2003
Giaotrinhaccess
Aspnet 3.5 _02
Chuong 07_ gắng kết dữ liệu asp.net
Hdth07 ltudql02-linq-ep1
Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...
Mo hinh-3-lop
Bài 6: Điều khiển DetailsView, FormView, ListView, DataPager
Hdth08 ltudql02-linq
Giao trinh he quan tri csdl
Mvc4 seminar - hoclaptrinhweb.com - Tài liệu Nhất Nghệ
Bai giang-access-2007
Ad

Similar to Asp.net 3.5 _8 (20)

PPTX
Entity framework 4
PPT
04 ado
PPT
ado.net
PDF
WINFORM CREATTION ABOUT SOMETHING THAT AMAZING
PDF
Hdth.chuong5 ado.netv2.0
DOCX
6.adapterset
PPT
Ung dung web chuong 6
PPTX
Data provider
PPT
01 chuong1-gioithieuado-140404114504-phpapp01
PPT
03 chuong 3 - data sets
PPT
03 chuong3-datasets-140404114719-phpapp02
PDF
Cai tien trong lenh t sql cua sql server 2008 (2)
PDF
Linq to-sql-tutorial
PDF
Linq to-sql-tutorial
DOCX
2.gioi thieu co ban ado.net cho nguoi lap trinh c#
PPT
ADO .NET Entity framework
PPT
S vnet.vn 51. [silde bài giảng] lập trình trên môi trường windows với ado.net...
PPT
Linq to-sql-1221970293242272-9
PDF
Lap trinhcosodulieuvoi c-sharp_phan-1
Entity framework 4
04 ado
ado.net
WINFORM CREATTION ABOUT SOMETHING THAT AMAZING
Hdth.chuong5 ado.netv2.0
6.adapterset
Ung dung web chuong 6
Data provider
01 chuong1-gioithieuado-140404114504-phpapp01
03 chuong 3 - data sets
03 chuong3-datasets-140404114719-phpapp02
Cai tien trong lenh t sql cua sql server 2008 (2)
Linq to-sql-tutorial
Linq to-sql-tutorial
2.gioi thieu co ban ado.net cho nguoi lap trinh c#
ADO .NET Entity framework
S vnet.vn 51. [silde bài giảng] lập trình trên môi trường windows với ado.net...
Linq to-sql-1221970293242272-9
Lap trinhcosodulieuvoi c-sharp_phan-1
Ad

Asp.net 3.5 _8

  • 1. MỤC LỤC 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
  • 2. Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 2 Bài số 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). 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
  • 3. Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 3 Hình 2: Các Folder và File trong Dynamic Data Khi đã tạo xong, bạn sẽ thấy một số Folder/File được đưa vào trong Solution Explorer (Hình 2). 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 phải chuột chọn “Add New Item” (Hình 3). Hình 3: Tạo Cơ sở dữ liệu
  • 4. Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 4 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). Để 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). LoaiSanPham gồm các trường: Id, TenLoaiSanPham (Hình 6). Hình 4: SQL Server Database Hình 5: Bảng SanPham trong CSDL My_Database.mdf
  • 5. Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 5 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 phải chuột chọn “Add Existing Item” (Hình 7). 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ó Hình 6: Bảng LoaiSanPham trong CSDL My_Database.mdf Hình 7: Thêm Cơ sở dữ liệu đã có
  • 6. Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 6 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). 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” . 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 10: Tạo ADO.NET Entity Data Model Classes Hình 9 Hình 11 Hình 12
  • 7. Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 7 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. 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 13 Hình 15 Hình 14 Hình 16: Tạo liên kết giữa bảng LoaiSanPham với bảng SanPham
  • 8. Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 8 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 <%@ Import Namespace="My_DatabaseModel" %> 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: <%@ Application Language="C#" %> <%@ Import Namespace="System.Web.Routing" %> <%@ Import Namespace="System.Web.DynamicData" %> <%@ Import Namespace="My_DatabaseModel" %> <script RunAt="server"> 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 combined- page 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 separate- page mode section above. //routes.Add(new DynamicDataRoute("{table}/ListDetails.aspx") { // Action = PageAction.List,
  • 9. 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); } </script> 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
  • 10. 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
  • 11. 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 { /// <summary> /// Thay đổi cho các thuộc tính cho 2 bảng SanPham và LoaiSanPham /// </summary> [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
  • 12. 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: <h1><span class="allcaps">Dynamic Data Site</span></h1> Thành: <h1 style="font-family:Times New Roman"><span class="allcaps">Dynamic Data VỚI ADO.NET Entity Framework</span></h1> Sửa: <a runat="server" href="~/"><img alt="Back to home page" runat="server" src="DynamicData/Content/Images/back.gif" />Back to home page</a> </div> Thành: <a runat="server" href="~/"><img alt="Trở về trang chủ" runat="server" src="DynamicData/Content/Images/back.gif" />Trở về trang chủ</a> Trong file “Details.aspx” sửa một số giao diện tiếng Anh và thay bằng tiếng Việt. <h2 style="font-family:Times New Roman">Chi tiết một bản ghi của bảng <%= table.DisplayName %></h2> <asp:DetailsView ID="DetailsView1" runat="server" DataSourceID="DetailsDataSource" OnItemDeleted="DetailsView1_ItemDeleted" CssClass="detailstable" FieldHeaderStyle-CssClass="bold" > <Fields> <asp:TemplateField> <ItemTemplate> <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" /> </ItemTemplate> </asp:TemplateField> </Fields> </asp:DetailsView> 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"> <Fields>
  • 13. Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 13 <asp:TemplateField> <ItemTemplate> <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ỏ" /> </ItemTemplate> </asp:TemplateField> </Fields> </asp:DetailsView> 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"> <FieldHeaderStyle CssClass="bold" /> <Fields> <asp:TemplateField> <ItemTemplate> <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ỏ" /> </ItemTemplate> </asp:TemplateField> </Fields> </asp:DetailsView> 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"> <Columns> <asp:TemplateField> <ItemTemplate> <asp:HyperLink ID="EditHyperLink" runat="server" NavigateUrl='<%# table.GetActionPath(PageAction.Edit, GetDataItem()) %>' Text="Sửa" />&nbsp;<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?");' />&nbsp;<asp:HyperLink ID="DetailsHyperLink" runat="server" NavigateUrl='<%# table.GetActionPath(PageAction.Details, GetDataItem()) %>' Text="Chi tiết" /> </ItemTemplate> </asp:TemplateField> </Columns> <PagerStyle CssClass="footer"/> <PagerTemplate> <asp:GridViewPager runat="server" /> </PagerTemplate> <EmptyDataTemplate> Không có dữ liệu trong bảng! </EmptyDataTemplate> </asp:GridView>
  • 14. 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
  • 15. 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: http://msdn.microsoft.com/en-us/library/cc488545.aspx 2. Microsoft ASP.NET, URL: http://www.asp.net/DynamicData/ 3. ScottGu's Blog, URL: http://weblogs.asp.net/scottgu/archive/2008/12/02/dec-2nd-links-asp-net-asp- net-dynamic-data-asp-net-ajax-asp-net-mvc-visual-studio-silverlight-wpf.aspx