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
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”.
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 2
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.
Từ Folder “App_Data” trong “Solution Explore” click phải chuô ̣t cho ̣n “Add New Item” (Hình 3).
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 3
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).
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 4
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 phải chuô ̣t cho ̣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).
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 5
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 11 Hình 12
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 6
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
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 7
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 });
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 8
// ViewName = "ListDetails",
// Model = model
//});
//routes.Add(new DynamicDataRoute("{table}/ListDetails.aspx") {
// Action = PageAction.Details,
// ViewName = "ListDetails",
// Model = model
//});
}
</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).
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 18 Hình 19
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 9
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).
[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.
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
{
/// <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!");
}
}
[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!");
}
}
[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 11
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; }
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>
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 12
<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>
<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 13
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.
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 14
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
Microsoft Vietnam – DPE Team | Bài số 8: Dynamic Data với ADO.NET Entity Framework 15