Cũng như phần ADO.NET, trong bài này chúng ta cũng  sử dụng  cơ sở dữ liệu QuanLySinhVien gồm hai bảng KhoaSinhVien và ứng dụng Console C# (ManagingData). Chúng ta có thể cài EntityFramework bằng cách vào Tools > Library Package Manager > Manage NuGet Packages for Solution…Tìm kiếm và cài đặt EntityFrameWork:

(Chú ý: ở đây là phiên bản VS 2102, các phiên bản VS sau này có thể vào Tools > NuGet Packages Manager > Manage NuGet Packages for Solution… )

Nhấp chuột phải vào tên dự án ManagingData chọn Add > New Item > ADO.NET Entity Data Model. Chọn Generate from database từ Entity Data Model Wizard và nhấn Next. Trong Choose Your Data Connection chọn New Connection. Trong New Connection chọn Server NameSelect or enter a database name

Nhấn OK, giữ nguyên tên QuanLySinhVienEntities và nhấn Next. Trong Choose Your Database Objects and Settings chọn Tables, giữ nguyên QuanLySinhVienModel trong Model Namespace:

Nhấn Finish.

Một tập tin Model1.edmx được thêm vào dự án trong cửa sổ Solution Explorer như sau:

Khung màn hình thiết kế xuất hiện như sau:

Chú ý rằng trong Khoa chứa SinhViens (tại Navigation Properties) và trong SinhVien chứa Khoa. Đường thẳng nối giữa KhoaSinhVien thể hiện mối quan hệ giữa hai bảng KhoaSinhVien kiểu một nhiều trong cơ sở dữ liệu (trên hình 1..*). Một khoa sẽ có nhiều sinh viên và một sinh viên chỉ thuộc về một khoa nên trong Navigation Properties sẽ chứa SinhViens (có ‘s’) và Khoa.

Lúc này, chúng ta đã phát sinh hai lớp KhoaSinhVien trong C# từ hai bảng KhoaSinhVien của cơ sở dữ liệu QuanLySinhVien chỉ bằng vài cú click chuột. Có thể dễ dàng xem mã C# của hai lớp và các thuộc tính của chúng bằng cách mở rộng Model1.edmx và chọn Khoa.csSinhVien.cs trong cửa sổ Solution Explorer:

Mã C# cho lớp Khoa:


//------------------------------------------------------------------------------

// <auto-generated>

//    This code was generated from a template.

//

//    Manual changes to this file may cause unexpected behavior in your application.

//    Manual changes to this file will be overwritten if the code is regenerated.

// </auto-generated>

//------------------------------------------------------------------------------

namespace ManagingData

{

  using System;

  using System.Collections.Generic;

  public partial class Khoa

  {

    public Khoa()

    {

       this.SinhViens = new HashSet<SinhVien>();

    }

    public string MaKhoa { get; set; }

    public string TenKhoa { get; set; }

    public virtual ICollection<SinhVien> SinhViens { get; set; }

  }

}

Mã C# cho lớp SinhVien:


/------------------------------------------------------------------------------

// <auto-generated>

//    This code was generated from a template.

//

//    Manual changes to this file may cause unexpected behavior in your application.

//    Manual changes to this file will be overwritten if the code is regenerated.

// </auto-generated>

//------------------------------------------------------------------------------

namespace ManagingData

{

   using System;

   using System.Collections.Generic;

   public partial class SinhVien

   {

     public string MaSV { get; set; }

     public string TenSV { get; set; }

     public string Email { get; set; }

     public string MaKhoa { get; set; }

     public virtual Khoa Khoa { get; set; }

   }

}

Chúng ta có thể dễ dàng tạo các đối tượng từ các lớp KhoaSinhVien. Ví dụ trong phương thức Main như sau:


Khoa kh = new Khoa();

kh.MaKhoa = "KH06";

kh.TenKhoa = "Co khi";

Để ý rằng, các lớp SinhVienKhoa là các lớp riêng phần (partial classes) nên chúng ta có thể mở rộng chúng đến các tập tin (.cs) khác. Ví dụ chúng ta có thể tạo thêm tập tin tên KhoaMoRong.cs (kích chuột phải vào ManagingData.cs chọn Add > New Item và chọn Class) có nội dung như sau:


public partial class Khoa

{

   public string ThongTinKhoa

   {

      get

      {

        return "Ma Khoa: " + MaKhoa + " " + "Ten Khoa: " + TenKhoa;

      }

   }

}

Trở lại hàm Main và thêm dòng mã như sau:


Khoa kh = new Khoa();

kh.MaKhoa = "KH06";

kh.TenKhoa = "Co khi";

Console.WriteLine("Thong tin ve khoa");

Console.WriteLine(kh.ThongTinKhoa);

(Tìm hiểu thêm về partial class tại http://www.tutorialsteacher.com/csharp/csharp-partial-class )

Để lấy dữ liệu từ cơ sở dữ liệu, chún g ta sử  dụng lớp context thừa kế từ lớp DbContext. Ví dụ để hiển thị thông tin từ  bảng Khoa thông qua đối tượng Khoa sử dụng lớp context như đoạn mã sau:


using (var context = new QuanLySinhVienEntities())

{

  // Access the database.

  List<Khoa> DSkhoa = context.Khoas.ToList();

  foreach(Khoa kh in DSkhoa)

  Console.WriteLine(kh.ThongTinKhoa);

}

Khi EntityFramework phát sinh các lớp KhoaSinhVien từ cơ sở dữ liệu QuanLySinhVien, chuỗi kết nối được phát sinh sẽ lưu trong tập tin App.config (hay Web.config nếu tạo ứng dụng ASP.NET). Như các bước thực hiện trong hộp thoại Entity Data Model Wizard chúng ta đã thực hiện ở trên, thông tin về chuỗi kết nối trong tập tin App.config như sau:


<?xml version="1.0" encoding="utf-8"?>

<configuration>

<configSections>

   <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->

   <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

      </configSections>

          <connectionStrings>

            <add name="QLSV" connectionString="Data Source=Admin-PC0617iey\SQLEXPRESS; Initial Catalog =QuanLySinhVien; Integrated Security=SSPI" />

            <add name="QuanLySinhVienEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=Admin-PC0617iey\SQLEXPRESS;initial catalog=QuanLySinhVien;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

          </connectionStrings>

      <startup>

          <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />

      </startup>

      <entityFramework>

         <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />

      </entityFramework>

</configuration>

Chúng ta có hai chuỗi kết nối QLSV – chúng ta đã tạo từ phần ADO.NET và chuỗi vừa phát sinh QuanLySinhVienEntities. Lệnh


var context = new QuanLySinhVienEntities()

Chính là lệnh tạo một kết nối đến cơ sở dữ liệu sử dụng chuỗi kết  nối QuanLySinhVienEntities.

Khi đã thực hiện kết nối thành công, thông tin về các bảng dữ liệu KhoaSinhVien sẽ được chuyển đến các đối tượng DbSet gồm KhoasSinhViens tương ứng. Do đó, để lấy dữ liệu từ bảng Khoa, chúng ta dùng đối tượng DbSet Khoas và phương thức mở rộng ToList() như sau:


List<Khoa> DSkhoa = context.Khoas.ToList();

Minh hoạ trong ứng dụng WPF

Học C# và WPF >