Cách khởi tạo Foreign Key với Entity Frameworks

Cách khởi tạo Foreign Key với Entity Frameworks

Cách khởi tạo Foreign Key với Entity Frameworks

Hi các bạn,

Như các bạn đã biết cách tạo ra 1 table thông qua Entity Frameworks(Mình xin ghi tắt là EF)

Các bạn có thể xem lại tại: http://sethphat.com/sp-379/multi-migrations-asp-net-mvc-5-entity-framework-6

Và các bạn đã biết, trong SQL Server một trong những tính năng hay, quan trọng đó là Foreign Key(Khóa ngoại)

Vậy mình sẽ hướng dẫn các bạn khởi tạo khóa ngoại trên EF nhé.

1/ Foreign Key cơ bản

Có 2 dạng Foreign Key mà ta thường sử dụng, đó là:

  • 1 – n: Table này 1 table kia nhiều.
  • n – n: Cả 2 table đều là nhiều.

2/ Cách khởi tạo Foreign Key với Entity Frameworks

Xác định table và column

Như các bạn đã biết, mọi entity được tạo ra đều fải có ID(ko dc đổi). Vậy nên các bạn cần lưu ý những chỗ mình bôi đen nhé.

Ví dụ mình có 2 table như sau:

Thế các bạn có thể thấy là Posts cần column ID của Users. Ở đây có nghĩa Users sẽ có nhiều, Posts thì chỉ có 1 (1-n)

Vậy nên ta sẽ tiến hành dùng Foreign Key cho Posts.

Nhảy qua EF Code

Table Users sẽ được tạo như sau:

public class User
{
	[Key]
	public int ID { get;set; }
	
	public string Name { get;set; }
	
	public string Email { get;set; }
	
	public string Phone { get;set; }
	
	public DateTime RegisterDate { get;set; }
	
	// Vi User là nhiều (n) nên Users fải khởi tạo như sau
	public ICollection<Post> Posts { get;set; }
	
	public User() 
	{
		this.Name = "";
		this.Email = "";
		this.Phone = "";
		this.RegisterDate = DateTime.Now;
		this.Posts = new HashSet<Post>();
	}
}

public class Post {
	[Key]
	public int ID { get;set; }
	
	// Khoi tao UserID de Mapping
	public int UserID { get;set; }
	
	public string Title { get;set; }
	
	public string Description { get;set; }
	
	public DateTime PostDate { get;set; }
	
	// Khai bao khoa ngoai
	public virtual User User { get;set; }
	
	public Post() {
		this.Title = "";
		this.Description = "";
		this.PostDate = DateTime.Now;
	}
}

Giải thích:

  • Ở Post, ta phải đặt đúng UserID, cùng kiểu dữ liệu với ID của User (điều này rất quan trọng, nếu ko sẽ ko mapping + foreign key dc)
  • Ở Post, ta phải khởi tạo virtual với class mà ta cần Foreign, còn lại hệ thống sẽ tự mapping cho ta.
  • Ở User, vì là table n, nên ta phải khai báo thêm 1 ICollection<Post>, điều này giúp chúng ta có thể Join,…

Lưu ý:

  • Đối với các table là nhiều (n) thì ta đều phải khai báo ICollection<Class>, khởi tạo ở dạng HashSet.
  • Cách đặt tên ICollection cần nên tuân theo EF để dễ quản lý sử dụng, Ví dụ class Post thì ICollection<Post> Posts (Posts ở số nhiều). Tương tự như các table khác.

Và chỉ vậy thôi, ta đã có thể tạo khóa ngoại cho table Post.

Bây giờ việc ta cần làm là bỏ 2 class này vào DbContext, sau đó chạy Update-Database thôi.

(Để chạy Migration xem lại tại: http://sethphat.com/sp-379/multi-migrations-asp-net-mvc-5-entity-framework-6

Đối với Table N-N

Gợi ý:

  • 1 table sẽ làm chủ đạo nhận 2 foreign key vào. Đặt tên để mapping đàng hoàng.
  • 2 table n sẽ có 2 ICollection từ table chủ đạo này.

Rất dễ phải ko nào? 😀

3/ Lời kết

Như trên, các bạn đã có thể tạo được Entities table và dùng khóa ngoại bằng 2 cách (Cách n-n tương tự).

Lưu ý vụ đặt tên, kiểu dữ liệu của ID nhé (vd ID mà int, ID kia long thì sẽ bị lỗi đấy).

Các bạn vừa đọc xong bài: Cách khởi tạo Foreign Key với Entity Frameworks

Cám ơn các bạn đã theo dõi 😀

facebook
Seth Phát

Seth Phát

Mình là Phát - biệt danh Seth Phát. Hiện đang là một Sr. Full-Stack Engineer. Mình là một người yêu thích và đam mê lập trình và hiện tại đang theo về phần Web là chủ yếu. Mạnh Back-end và khá Front-end, vẫn đang theo đều cả 2 :v. Còn gì bằng khi được làm những thứ mà mình yêu thích, đam mê ;)

Bình luận qua Facebook