- Ở 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