Truy vấn Linq với Entity Framework

Một phần của tài liệu GIÁO TRÌNH lập TRÌNH cơ sở dữ LIỆU c với LINQ ENTITYFRAMEWORK (Trang 33 - 36)

- Ở phần trước chúng tôi đã hướng dẫn các bạn xây dựng mô hình truy vấn CSDL bằng : Entity Framework code fist , Entity Framework database first và Linq to sql .

- Tùy từng dựng án mà bạn chọn 1 trong 3 giải pháp

- Thông thường chúng ta dùng Entity Framework code first để dễ dàng quản lý nhiều tính năng và mã nguồn

- Khi đã có lớp Entity thì chúng ta thao tác trên các lớp này dùng linq cũng tương tự như các bạn thao tác với lớp List<T>

- Việc truy vấn CSDL theo phong cách hoàn toàn hướng đối tượng , đó là sự khác biệt của dùng Linq - Entity Framework so với Ado.net thuần

- Dưới đây chúng tôi giới thiệu 1 vài thao tác cơ bản dùng Linq thao tác với Entity Framework - Trước tiên ta cần khai báo lớp Entity như sau :

MyEntity db = new MyEntity();

( chúng ta thường đặt tên biến Entity là db ( database) vì coi nó là 1 mô hình CSDL)

- Việc truy vấn , xử lý dữ liệu với các mô hình EF code first , database first hay liq to sql hoàn toàn tương tự nhau .Các ví dụ dưới đây chúng tôi chạy trên mô hình code first

4.1 Truy vấn lấy dữ liệu

- Ở các ví dụ trên chúng tôi đã sử dụng truy vấn lấy dữ liệu , dưới đây chúng tôi giới thiệu 1 vài truy vấn Linq dùng trong Entity Framework như thao tác với lớp list<T>

- khai báo biến Entity

MyEntity1 db = new MyEntity1();

Câu truy vấn Kiểu dữ liệu trả về

db.Products IEnumerable<Product> Trả về danh sách bảng Product dưới CSDL

db.Products.Where(m=>m.ProductID==1)

IEnumerable<Product> Lấy về danh sách Product có mã là 1 .Chú ý vẫn là danh sách , vì có thể cho nhiều kết quả

db.Products.Single(m=>m.ProductID==1) Product Trả về 1 Product thỏa mãn có ProductID là 1

db.Products.Where(m=>m.ProductName==

"Product 1")

IEnumerable<Product> Lấy về danh sách Product , thỏa ProductName là Product 1

db.Products.Find(1); Product Trả về Product có id là 1

db.Products.Take(3); IEnumerable<Product> Trả về 3 Product đầu tiên

db.Products.Skip(3); IEnumerable<Product> Trả về Product từ vị trí thứ 3

- Qua 1 vài truy vấn cơ bản các bạn thấy được các truy vấn lấy dữ liệu trong Entity Framework hoàn toàn tương tự với việc truy vấn đối tượng List<T>

- Việc truy vấn trả về các đối tượng kiểu IEnumable , Product rất dễ hiển thị trên các giao diện winform , wpf , web ( mvc , webform) làm cho việc truy vấn , xử lý CSDL mang như xử lý các lớp đối tượng C#

4.2 Thêm xóa đối tượng

Thêm mới đối tượng

- Giả sử ta có 1 đối tượng Product được lấy từ giao diện , và muốn thêm mới xuống CSDL

- Ở đây chúng tôi tạo mới tĩnh 1 đối tượng Product sau đó lưu xuống CSDL

MyEntity db = new MyEntity();

// khai báo đối tượng Product,thông thường đối tượng Product được lấy từ các ô nhập liệu trên giao diện chương trình

var _Product = new Product { ProductName = "Product 5" };

// Thêm mới Product

db.Products.Add(_Product);

// Lưu toàn bộ thay đổi xuống CSDL db.SaveChanges();

- Ở đây ta không cần khai báo thuộc tính ProductID vì đây là trường khóa tự động tăng - Phương thức Add đã thêm dữ liệu trên giao diện chương trình .Ta luôn gọi phương thức db.SaveChanges() để mọi thay đổi được thực sự lưu xuống CSDL

- Entity Framework không hỗ trợ thêm 1 danh sách đối tượng xuống CSDL . Tuy nhiên nếu bạn có kiến thức về Generic ,Extension Method , Reflection bạn hoàn toàn có thể thêm các phương thức này để xử lý điều này

4.3 Sửa đối tượng

Có 2 cách dùng sửa đối tượng đó là :

Cách 1 : Lấy đối tượng cần sửa , sửa các thông tin , sau đó gọi phương thức SaveChanges() .Đây là cách thông thường trong lập trình CSDL .

MyEntity db = new MyEntity();

// Lấy về đối tượng Product cần sửa var _Product= db.Products.Find(1);

// thay đổi thông tin Product

_Product.ProductName = "Product 1 (Update)";

// Lưu xuống CSDL db.SaveChanges();

- Trường hợp lấy product theo tên , chúng ta phải luôn đảm bảo lấy về chỉ 1 Product duy nhất như sau :

MyEntity db = new MyEntity();

// Lấy về đối tượng Product cần sửa

var _Product= db.Products.Single(m=>m.ProductName=="Product 1") // thay đổi thông tin Product

_Product.ProductName = "Product 1 (Update)";

// Lưu xuống CSDL db.SaveChanges();

Cách 2 : Dùng phương thức Update của đối tượng Entity

- Entity Framework cung cấp 1 phương thức hỗ trợ cập nhật dữ liệu .Ta chỉ cần truyền 1 Product , sau đó Entity Framework tự động tìm đối tượng đó và thay đổi thông tin

Ta có thể lấy về 1 Product dưới CSDL như cách trên , hoặc thông thường ta lấy Product cần thay đổi trên giao diện của chương trình .

MyEntity db = new MyEntity();

// Tạo đối tượng Product cần sửa đổi

var _Product = new Product { ProductID=1, ProductName="Product 1 (Update)"};

// Sửa đổi dữ liệu bằng truyền đối tượng cần sửa đổi db.Entry(_Product).State=EntityState.Modified;

// Lưu xuống CSDL db.SaveChanges();

- Ở đây đối tượng Product có ProductID = 1 phải chắc chắn tồn tại không sẽ sinh ra lỗi do Entity Framework không tìm thấy đối tượng cần sửa đổi .

- Có thể xử lý lỗi ngoại lệ trong trường hợp này 4.4 Xóa đối tượng

- Tương tự như phương thức Add , để xóa 1 đối tượng ta cần gọi phương thức Remove với tham số truyền vào là Product cần xóa .

- Ví dụ dưới đây sẽ xóa Product có ProductID là 1

MyEntity db = new MyEntity();

// Tạo đối tượng Product cần sửa đổi var _Product = db.Products.Find(1);

// Xóa đối tượng

db.Products.Remove(_Product);

// Lưu xuống CSDL db.SaveChanges();

- Entity Framework không hỗ trợ xóa 1 danh sách đối tượng xuống CSDL . Tuy nhiên nếu bạn có kiến thức về Generic ,Extension Method , Reflection bạn hoàn toàn có thể thêm các phương thức này để xử lý xóa 1 danh sách đối tượng

Một phần của tài liệu GIÁO TRÌNH lập TRÌNH cơ sở dữ LIỆU c với LINQ ENTITYFRAMEWORK (Trang 33 - 36)

Tải bản đầy đủ (PDF)

(50 trang)