Tài liệu bao gồm đầy đủ cả phần báo cáo lẫn thiết kế về cơ sở dữ liệu bao gồm:+Phần báo cáo lý thuyết+Thiết kế các bảng dữ liệu+Cài đặt các bảng dữ liệu vào SQL Server(Transact SQL)+Thiết kế đầy đủ Trigger ,Constraint trước khi insert dữ liệu vào cơ sở dữ liệu SQL Server+Insert dữ liệu cho đầy đủ các bảng thỏa mãn Trigger và Constraint ở trên(dữ liệu có sẵn)+Thực hiện các thao tác với cơ sở dữ liệu:Insert,Update,Delete,Select,Group By,Order by,Inner Join,Left Join,...và các câu truy vấn nâng cao+Thực hiện các thao tác Stored Procedure,Function,Trigger+Kết nối cơ dữ dữ liệu với Entity FrameworkVà các thao tác nâng cao khác++
HỌC VIỆN KỸ THUẬT QUÂN SỰ KHOA CÔNG NGHỆ THÔNG TIN Giáo viên hướng dẫn: Chu Thị Hường Sinh viên: Nguyễn Quang Dự -KTPM16 Lê Văn Thắng -KTPM16 Lớp:Thực tập sở liệu chiều thứ BÁO CÁO MÔN HỌC THỰC TẬP CƠ SỞ DỮ LIỆU Đề tài:Quản lý bán hàng xe đạp online CHƯƠNG ĐẶC TẢ HỆ THỐNG Mục đích yêu cầu Hiện nay, doanh nghiệp việc quản lý hàng hoá, nhân viên, hàng xuất nhập hàng ngày…gặp nhiều khó khăn, ý tưởng tạo lên phần mềm để góp phần giải vấn đề người lập trình khơng thể tránh khỏi Ngồi việc cung cấp cho phần mềm giúp người kinh doanh quản lý nhân viên,khách hàng,hàng hóa,đơn nhập,xuất,…Phần mềm giúp người kinh doanh: tổng kết doanh thu,chi phí cửa hàng tháng(quý năm ) Tổng kết số lượng xe bán chậm khoảng thời gian định để hạn chế nhập hàng lại Tổng kết số lượng xe bán chạy khoảng thời gian định(theo mùa,theo tháng,theo năm) để nhập hàng đáp ứng nhu cầu mua hàng khách hàng Tài cửa hàng có đáp ứng nhu cầu nhập hàng công ty không đưa giải pháp 1.1 Mô tả hệ thống Một hệ thống kinh doanh cần có cơng việc sau: Nhập hàng Bán hàng Bộ phận bảo hành(sửa chữa) 1.1.1 Cơ cấu tổ chức phân công trách nhiệm Cửa hàng có chức vụ nhân viên: Nhân viên giới thiệu sản phẩm Nhân viên quản lí Nhân viên kho hàng Nhân viên chủ kho Nhân viên sửa chữa(bảo hành) Nhân viên kế toán 1.1.1.1 Bợ phận nhập hàng Nhân viên kho có nhiệm vụ: - Nhập hàng kiểm tra hàng báo cáo lại cho nhân viên quản lí - Giao hàng cho khách hàng - Kiểm kê kho 1.1.1.2 Bộ phận bán hàng Nhân viên giới thiệu sản phẩm có nhiệm vụ: - Giới thiệu chi tiết sản phẩm cho khách hàng - Giải đáp thắc mắc khách hàng sản phẩm Nhân viên quản lí có nhiệm vụ: - Lập hóa đơn bán hàng - Thanh tốn hóa đơn với khách hàng - Lập đơn hàng nhập hàng - Thanh tốn hóa đơn với nhà cung cấp - Giải vấn đề đổi hàng(do hàng bị lỗi) 1.1.1.3:Bợ phận sửa chữa Nhân viên sửa chữa có nhiệm vụ: - Tiếp nhận trường hợp đổi trả sản phẩm - Sửa chữa vấn đề liên quan đến sản phẩm khách hàng thời gian bảo hành (như hỏng hóc,…) 1.2:Quy trình nghiệp vụ 1.2.1 Nhập hàng Khi có yêu cầu nhập hàng ,nhân viên kho nhập hàng,nhân viên chủ kho check hàng kiểm tra số lượng báo lại cho nhân viên quản lí Nhân viên quản lí cập nhật mẫu xe vào hệ thống nhập hóa đơn nhập hàng vào hệ thống Sau tốn hóa đơn với nhà sản xuất 1.2.2 Bán hàng *Khách hàng mua trực tiếp cửa hàng Khi khách hàng đến cửa hàng xem sản phẩm, nhân viên giới thiệu sản phẩm tư vấn cho khách hàng sản phẩm Nếu khách hàng mua sản phẩm nhân viên kho lấy sản phẩm kho mang đến phận nhân viên quản lí để nhân viên quản lí lập hóa đơn mua hàng cho khách hàng, đơn hàng lập thành bản: -1 lưu phận quản lý(trong hệ thống) -1 đưa cho khách (khi đã toán) * Khách hàng mua online Sau đơn hàng online gửi đến cửa hàng ,nhân viên quản lí dùng số điện thoại khách hàng để gọi cho khách hàng xác nhận khách hàng đặt hàng cửa hàng Nhân viên quản lí yêu cầu nhân viên chủ kho chuẩn bị đơn hàng, nhân viên kho gói hàng cẩn thận giao hàng cho khách hàng Khách hàng nhận hàng sau kiểm tra hàng xong khách hàng toán với nhân viên kho Sau nhân viên kho báo cáo với nhân viên quản lí kho tình trạng đơn hàng(hoàn thành hay chưa) Nhân viên chủ kho báo lại cho nhân viên quản lý để nhân viên quản lý hồn thành thơng tin đơn hàng vào hệ thống(chốt đơn: ĐÃ HOÀN THÀNH HOẶC CHƯA HOÀN THÀNH) 1.2.3:Sửa chữa(bảo hành) *Sản phẩm đổi trả Sản phẩm đổi trả vòng 30 ngày.Vậy nên khách hàng đến đổi sản phẩm lỗi nhân viên quản lí đưa sản phẩm đến phận nhân viên sửa chữa check sản phẩm xem có lỗi nhà sản xuất hay không hay lỗi khách hàng để có biện pháp đổi hàng khác cho khách hàng(hoặc khách hàng mua sản phẩm khác với số tiền bù thêm,…) Nếu sản phẩm lỗi nhà sản xuất khách hàng đổi sản phẩm nhân viên quản lí lập hóa đơn mua hàng khác thực việc đổi sản phẩm cho cho khách chuyển sản phẩm lỗi vào kho để sau thực việc đổi trả với nhà sản xuất *Sản phẩm bảo hành Trong thời gian bảo hành khách hàng muốn sửa chữa vấn đề liên quan đến sản phẩm Khách hàng đưa đến phận nhân viên sửa chữa để hỗ trợ khắc phục lỗi sản phẩm 1.3 Một số ghi cửa hàng quy tắc nghiệp vụ Cửa hàng có chi nhánh Số lượng nhân viên chi nhánh Sản phẩm có chương giảm giá theo đợt năm(theo ngày đặc biệt),giảm giá cho khách hàng tùy vào số lượng sản phẩm mua cửa hàng,chính sách giảm giá cho khách hàng quen thuộc 1.3 Đặc tả chức cần xây dựng 1.3.1 Nhập hàng -Đầu vào: yêu cầu nhập hàng -Đầu ra: Cập nhật hàng ,cập nhật thông tin nhà sản xuất 1.3.2: Lập đơn nhập hàng vào hệ thống - Đầu vào: Phiếu yêu cầu - Đầu ra: Đơn nhập hàng 1.3.3 Lập đơn bán hàng - Đầu vào: Yêu cầu mua hàng - Đầu ra: Hóa đơn bán hàng -Nội dung xử lí: Xác nhận yêu cầu mua hàng khách hàng lập hóa đơn mua hàng 1.3.4 Lập phiếu giao hàng - Đầu vào: Phiếu giao hàng - Đầu ra: Phiếu xuất kho - Nội dung xử lý: Kiểm tra phiếu giao hàng gửi phiếu yêu cầu xuất kho đến kho hàng 1.3.5 Kiểm tra hàng - Đầu vào: kiểm tra hàng kho - Đầu ra: + Nếu: hàng kho lớn hàng khách yêu cầu dừng kiểm tra hàng + Nếu: hàng kho nhỏ hàng khách yêu cầu lập phiếu yêu cầu nhập hàng - Nội dung xử lý: cập nhật hàng kho lên danh sách mặt hàng cần nhập thêm, sau gửi yêu cầu nhập hàng 1.3.6:Cập nhật nhân viên Đầu vào:Nhân viên nhân viên xin thơi việc Đầu ra:Cập nhật tình trạng nhân viên (thôi việc hay làm việc) vào hệ thống 1.3.7:Cập nhật danh sách khách hàng Đầu vào:Khách hàng cửa hàng Đầu ra:Cập nhật khách hàng vào hệ thống CHƯƠNG 2: PHÂN TÍCH VÀ CÀI ĐẶT DỮ LIỆU HỆ THỐNG *Chuẩn hóa liệu: Dạng chuẩn – 1NF (First Normal Form) Định nghĩa: Một bảng (quan hệ) gọi dạng chuẩn 1NF toàn miền giá trị cột có mặt bảng (quan hệ) chứa giá trị nguyên tử (nguyên tố) Ví dụ: Một bảng (quan hệ) chưa 1NF: MASV HOTEN DIACHI MAMON TENMON DIEM A01 Lê Na 12 Thái Hà M01M02 CSDLAnh 89 A02 Trần An 56 Mã Mây M01 CSDL A03 Hà Nam 24 Cầu Gỗ M01M02M03 CSDLAnhToán 689 Dạng chuẩn – 2NF Định nghĩa Một quan hệ dạng chuẩn 2NF quan hệ đó: Là 1NF Các thuộc tính khơng khố phải phụ thuộc hàm đầy đủ vào khố Ví dụ Ví dụ1: Cho quan hệ R = (ABCD) , khoá AB tập phụ thuộc hàm F = {AB -> C, AB -> D}là quan hệ đạt chuẩn 2NF Ví dụ2: Cho quan hệ R = (ABCD) , khố AB tập phụ thuộc hàm F = {AB -> C, AB -> D, B -> DC} quan hệ khơng đạt chuẩn 2NF có phụ thuộc hàm B -> DC phụ thuộc hàm phận (phụ thuộc hàm khơng đầy đủ) vào khố Khi ta đưa dạng chuẩn 2NF sau: Nhận xét Một quan hệ dạng chuẩn 2NF thoả mãn đièu kiện sau: Khố gồm thuộc tính Bảng khơng có thuộc tính khơng khố Tất thuộc tính khơng khố phụ thuộc hồn tồn vào tập thuộc tính khố Dạng chuẩn – 3NF Định nghĩa Một quan hệ dạng chuẩn 3NF quan hệ đó: Là 2NF Các thuộc tính khơng khố phải phụ thuộc trực tiếp vào khố Ví dụ Ví dụ1: Cho quan hệ R = (ABCDGH, khoá AB tập phụ thuộc hàm F = {AB -> C, AB -> D, AB -> GH} quan hệ đạt chuẩn 3NF Ví dụ2: Cho quan hệ R = (ABCDGH) , khoá AB tập phụ thuộc hàm F = {AB -> C, AB -> D, AB -> GH, G -> DH} quan hệ không đạt chuẩn 3NF có phụ thuộc hàm G -> DH phụ thuộc hàm gián tiếp vào khố Khi ta đưa dạng chuẩn 3NF sau: 2.1 Xác định kiểu thực thể,kiểu tḥc tính 1.HANG_XE(ID_Hang,Ten_hang) +khóa chính:ID_Hang +tập phụ tḥc hàm:ID_Hang->Ten_hang đạt chuẩn 3nf 2.LOAI_XE(ID_Loai,Ten_Loai) +khóa chính:ID_Loai +tập phụ tḥc hàm:ID_Loai->Ten_Loai đạt chuẩn 3nf 3.XE(ID_Xe,Ten_Xe,ID_Loai,ID_Hang,Model,Gia_ban,Bao_hanh,Mo_ta,khu yen_mai_hien_tai,is_con_hang,is_het_hang,khong_kinh_doanh) +khóa chính:ID_Xe +Tập phụ thuộc hàm: ID_Xe-> Ten_Xe, ID_Loai, ID_Hang, Model,Gia_ban,Bao_hanh,Mo_ta,khuyen_mai_hien_tai,is_con_hang,is_ het_hang,khong_kinh_doanh Đạt chuẩn 3nf 4.NSX(ID_NSX,Ten_NSX,SDT,email,Dia_chi) +khóa chính:ID_NSX +tập phụ tḥc hàm: ID_NSX -> Ten_NSX, SDT, email, Dia_chi đạt chuẩn 3nf 5.DON_NHAP_HANG(ID_hoa_don_nhap,ID_NSX, ID_chu_kho,ngay_nhap_hang) +khóa chính:ID_hoa_don_nhap +tập phụ tḥc hàm: ID_hoa_don_nhap -> ID_NSX , ngay_nhap_hang đạt chuẩn 3nf 6.CHI_TIET_DON_NHAP_HANG(ID_hoa_don_nhap, ID_muc,ID_Xe,Gia_nhap,So_luong,Chiet_khau) +khóa chính:ID_hoa_don_nhap,ID_muc ID_chu_kho, +tập phụ thuộc hàm: ID_hoa_don_nhap,ID_Muc -> ID_Xe, Gia_nhap, So_luong, Chiet_khau đạt chuẩn 3nf 7.CUA_HANG(ID_cua_hang,Ten_cua_hang,SDT,email,dia_chi) +khóa chính:ID_cua_hang +tập phụ tḥc hàm: ID_cua_hang -> Ten_cua_hang, SDT, email, dia_chi đạt chuẩn 3nf 8.KHO(ID_cua_hang,ID_Xe,So_luong_khong_loi,So_luong_bi_loi) +khóa chính:ID_cua_hang,ID_XE +tập phụ tḥc hàm: ID_cua_hang,ID_XE->So_luong_khong_loi,So_luong_bi_loi đạt chuẩn 3nf 9.CHUC_VU(ID_chuc_vu,Ten_chuc_vu,Luong) +khóa chính:ID_chuc_vu +tập phụ tḥc hàm: ID_chuc_vu->Ten_chuc_vu,Luong đạt chuẩn 3nf 10.NHAN_VIEN(ID_NV,Ten_nhan_vien,SDT,Dia_chi,ngay_vao_lam_viec,I D_chuc_vu,is_dang_lam_viec,is_nghi_viec,ID_cua_hang, ID_nguoi_quan_li) +khóa chính:ID_NV +tập phụ tḥc hàm: ID_NV->Ten_nhan_vien, SDT, Dia_chi, ngay_vao_lam_viec ,ID_chuc_vu,is_dang_lam_viec,is_nghi_viec,ID_cua_hang, ID_nguoi_quan_li đạt chuẩn 3nf i.so_luong, (CASE WHEN i.so_luong BETWEEN AND 10 THEN 0.03 WHEN i.so_luong >10 THEN 0.05 ELSE END), i.id_don_dat_hang, i.id_muc FROM inserted i) OPEN cur FETCH NEXT FROM cur INTO @gia_xe,@id_cua_hang,@id_xe,@so_luong,@chiet_khau,@id_insert_hdd,@id_insert_muc WHILE @@FETCH_STATUS=0 BEGIN INSERT INTO ban_hang.chi_tiet_dat_hang SELECT i.id_don_dat_hang,i.id_muc,i.id_xe,i.so_luong,@gia_xe,@chiet_khau FROM inserted i WHERE i.id_don_dat_hang=@id_insert_hdd AND i.id_muc = @id_insert_muc phần điều hướng em mong muốn UPDATE san_pham.kho SET so_luong=so_luong - @so_luong WHERE id_cua_hang=@id_cua_hang AND id_xe=@id_xe FETCH NEXT FROM cur INTO @gia_xe,@id_cua_hang,@id_xe,@so_luong,@chiet_khau,@id_insert_hdd,@id_insert_muc END CLOSE cur DEALLOCATE cur END sửa lại chút phần update kho hàng ALTER TRIGGER [san_pham].[update_kho] ON [san_pham].[kho] AFTER UPDATE AS BEGIN DECLARE @id_xe INT, @tinh_trang TINYINT thuộc phần nhập kho IF EXISTS (SELECT d.id_xe FROM deleted d WHERE d.so_luong=0) BEGIN DECLARE cur2 CURSOR FOR ( SELECT d.id_xe FROM deleted d WHERE d.so_luong=0 ) OPEN cur2 FETCH NEXT FROM cur2 INTO @id_xe WHILE @@FETCH_STATUS=0 BEGIN SELECT @tinh_trang=x.tinh_trang FROM san_pham.xe x WHERE x.id_xe=@id_xe IF @tinh_trang = BEGIN UPDATE san_pham.xe SET tinh_trang = WHERE id_xe = @id_xe END FETCH NEXT FROM cur2 INTO @id_xe END CLOSE cur2 DEALLOCATE cur2 END thuộc phần bán hàng IF EXISTS (SELECT i.id_xe FROM inserted i WHERE i.so_luong=0) BEGIN DECLARE cur2 CURSOR FOR ( SELECT i.id_xe FROM inserted i WHERE i.so_luong =0 ) OPEN cur2 FETCH NEXT FROM cur2 INTO @id_xe WHILE @@FETCH_STATUS=0 BEGIN trước tiến kiểm tra kho có cửa hàng xe khơng có khơng thay đổi tình trạng xe khơng ta update tình trạng:hết hàng IF NOT EXISTS(SELECT id_cua_hang FROM san_pham.kho WHERE id_xe=@id_xe AND so_luong>0) BEGIN UPDATE san_pham.xe SET tinh_trang=2 END FETCH NEXT FROM cur2 INTO @id_xe END END END Tạo stored procedure 1:tổng hợp đơn hàng tháng(năm) để tính số tiền chi ra,và số tiền thu vê tổng tiền chi CREATE PROCEDURE ban_hang.tong_hop_chi (@thang INT =NULL,@nam INT) AS BEGIN DECLARE @id_hoa_don INT IF @thang IS NULL BEGIN DECLARE cur CURSOR FOR (SELECT c.id_don_nhap FROM ban_hang.chi c WHERE YEAR(c.ngay_nhap)=@nam) END ELSE BEGIN DECLARE cur CURSOR FOR (SELECT c.id_don_nhap FROM ban_hang.chi c WHERE YEAR(c.ngay_nhap)=@nam AND MONTH(c.ngay_nhap)=@thang) END OPEN cur FETCH NEXT FROM cur INTO @id_hoa_don WHILE @@FETCH_STATUS=0 BEGIN DECLARE @tong_tien DECIMAL(8,0) SELECT @tong_tien = SUM(ct.gia_nhap*ct.so_luong*(1-ct.chiet_khau)) FROM nhap_hang.chi_tiet_don_nhap_hang ct WHERE ct.id_hoa_don_nhap=@id_hoa_don GROUP BY ct.id_hoa_don_nhap UPDATE ban_hang.chi SET tong_tien = @tong_tien WHERE id_don_nhap=@id_hoa_don FETCH NEXT FROM cur INTO @id_hoa_don END CLOSE cur DEALLOCATE cur IF @thang IS NULL SELECT SUM(tong_tien) FROM ban_hang.chi WHERE YEAR(ngay_nhap)=@nam ELSE SELECT SUM(tong_tien) FROM ban_hang.chi WHERE YEAR(ngay_nhap)=@nam AND MONTH(ngay_nhap)=@thang END tổng tiền thu CREATE PROCEDURE ban_hang.tong_hop_thu (@thang INT =NULL,@nam INT) AS BEGIN DECLARE @id_hoa_don INT IF @thang IS NULL BEGIN DECLARE cur CURSOR FOR (SELECT tn.id_don_ban FROM ban_hang.thu_nhap tn WHERE YEAR(tn.ngay_thanh_toan)=@nam) END ELSE BEGIN DECLARE cur CURSOR FOR (SELECT tn.id_don_ban FROM ban_hang.thu_nhap tn WHERE YEAR(tn.ngay_thanh_toan)=@nam AND MONTH(tn.ngay_thanh_toan)=@thang) END OPEN cur FETCH NEXT FROM cur INTO @id_hoa_don WHILE @@FETCH_STATUS=0 BEGIN DECLARE @tong_tien DECIMAL(8,0) SELECT @tong_tien= (SELECT SUM(ct.gia_ban*ct.so_luong*(1-ct.giam_gia)) *(1-dh.giam_gia_khach_quen)+dh.tien_ship FROM ban_hang.chi_tiet_dat_hang ct WHERE ct.id_don_dat_hang=@id_hoa_don) FROM ban_hang.dat_hang dh WHERE dh.id_don_dat_hang =@id_hoa_don UPDATE ban_hang.thu_nhap SET tong_tien =@tong_tien WHERE id_don_ban =@id_hoa_don FETCH NEXT FROM cur INTO @id_hoa_don END CLOSE cur DEALLOCATE cur IF @thang IS NULL SELECT SUM(tong_tien) FROM ban_hang.thu_nhap WHERE YEAR(ngay_thanh_toan)=@nam ELSE SELECT SUM(tong_tien) FROM ban_hang.thu_nhap WHERE YEAR(ngay_thanh_toan)=@nam AND MONTH(ngay_thanh_toan)=@thang END tổng hợp xe bán chạy tháng/năm CREATE PROCEDURE ban_hang.xe_ban_nhieu_nhat(@thang INT = NULL,@nam INT) AS BEGIN IF @thang IS NULL BEGIN SELECT TOP(3) WITH TIES ct.id_xe,SUM(ct.so_luong) so_luong FROM ban_hang.dat_hang dh INNER JOIN ban_hang.chi_tiet_dat_hang ct ON dh.id_don_dat_hang = ct.id_don_dat_hang WHERE YEAR(dh.ngay_giao_hang) =@nam GROUP BY ct.id_xe ORDER BY so_luong DESC END ELSE BEGIN SELECT TOP(5) WITH TIES ct.id_xe,SUM(ct.so_luong) so_luong FROM ban_hang.dat_hang dh INNER JOIN ban_hang.chi_tiet_dat_hang ct ON dh.id_don_dat_hang = ct.id_don_dat_hang WHERE YEAR(dh.ngay_giao_hang) =@nam AND MONTH(dh.ngay_giao_hang)=@thang GROUP BY ct.id_xe ORDER BY so_luong DESC END END tổng hợp xe bán chậm tháng/năm CREATE PROCEDURE ban_hang.xe_ban_it_nhat(@thang INT = NULL,@nam INT) AS BEGIN IF @thang IS NULL BEGIN SELECT TOP(3) WITH TIES ct.id_xe,SUM(ct.so_luong) so_luong FROM ban_hang.dat_hang dh INNER JOIN ban_hang.chi_tiet_dat_hang ct ON dh.id_don_dat_hang = ct.id_don_dat_hang WHERE YEAR(dh.ngay_giao_hang) =@nam GROUP BY ct.id_xe ORDER BY so_luong ASC END ELSE BEGIN SELECT TOP(3) WITH TIES ct.id_xe,SUM(ct.so_luong) so_luong FROM ban_hang.dat_hang dh INNER JOIN ban_hang.chi_tiet_dat_hang ct ON dh.id_don_dat_hang = ct.id_don_dat_hang WHERE YEAR(dh.ngay_giao_hang) =@nam AND MONTH(dh.ngay_giao_hang)=@thang GROUP BY ct.id_xe ORDER BY so_luong ASC END END Chương 5:Mơ hình kết nối sở liệu Giới thiệu mô hình Entity Framework (EF) framework ánh xạ quan hệ đối tượng (ORM) dành cho ADO.NET, phần NET Framework EF cho phép nhà phát triển Web tương tác với liệu quan hệ theo phương pháp hướng đối tượng đặc trưng Lợi ích lớn EF giúp lập trình viên giảm thiểu việc lập trình mã nguồn cần thiết để truy cập tương tác với sở liệu EF Microsoft hỗ trợ phát triển lâu dài bền vững, EF framework mạnh để phát triển ứng dụng Web với hỗ trợ đông đảo nhà phát triển Web Chắc hẳn, bạn đã biết mơ hình Web tầng (n tầng) đọc sách, giáo trình, giảng nội dung lập trình Web Tuy nhiên, vấn đề bạn cần phải hiểu rõ là: việc định rõ số lượng tầng mối liên hệ tầng mơ hình phát triển Web đa dạng, tùy theo cách hiểu lập trình viên dự án Web Do đó, việc hiểu Entity Framework nằm đâu mơ hình Web tầng khơng hồn tồn dễ dàng Trong phần này, tơi có tham khảo từ Stephen M Redd nhằm giúp bạn hiểu rõ chất vấn đề 2.Trình bày mơ hình Vị trí EF Các bạn hình dung EF thư viện, tầng cần cần gọi đến Mơ hình xuất phát cẩu thả lập trình viên khơng thích tn theo tiêu chuẩn quan hệ tầng cách giải thích khác lỏng lẻo giúp cho việc lập trình thuận tiện EF có vị trí trung gian, đóng vai trò kết nối sở liệu thành phần khác dự án Web cần đến Ngồi ra, có nhiều cách hiểu vị trí EF đâu mơ hình Web, bạn dần khám phá để đưa cách hiểu định nghĩa riêng trình thiết kế xây dựng dự án Web ASP.NET Tạo model Model nơi mơ tả liệu, cách thức liệu xử lý Hãy tạo dự án Console thư mục ef01 có cài đặt package để thực hành Ở tạo model đơn giản, lớp có tên Product biểu diễn dòng bảng CDSL, bảng tên Products using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace ef01 { public class Product { public int ProductId {set; get;} public string Name {set; get;} public string Provider {set; get;} } } Trước sử dụng model Product EF Core, hãy bổ sung thiết lập thông qua Attribute (sử dụng Sử dụng Attribute) sau: + Thiết lập lớp Product ánh xạ vào bảng Products với thuộc tính Table: [Table("Products")] + Trường ProductId Primary key bảng với thuộc tính [Key] + Trường Name bắt buộc phải thiết lập (khác null) dùng thuộc tính [Required], độ dài tối là 50 ký tự với thuộc tính [StringLength(50)] Tạo Context – dbContext + Để thực tạo mối liên hệ bảng Products tong CSDL model, tạo Context sau: Tạo lớp kế thừa DbContext đặt tên ProductsContext, lớp mang ý nghĩa CSDL + Trong cần nạp chồng OnConfiguring để cấu hình (thiết lập chuỗi kết nối ), tạo thuộc tính có kiểu DbSet bảng CSDL using Microsoft.EntityFrameworkCore; namespace ef01 { public class ProductsContext : DbContext { // Chuỗi kết nối, có định tên CSDL làm việc private const string connectionString = "Data Source=localhost,1433;Initial Catalog=mydata;User ID=SA;Password=Password123"; protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { base.OnConfiguring(optionsBuilder); optionsBuilder.UseSqlServer(connectionString); } public DbSet products {set; get;} // Bảng Products DB } } Chèn liệu vào bảng, AddAsync, AddRangeAsync, SaveChangesAsync + Các đối tượng DbContext hay DbSet (như thuộc tính products lớp ProductContext trên) có phương thức AddAsync để bạn chèn đối tượng phù hợp vào DbContext Sau gọi phương thức SaveChangesAsync để thực chèn liệu // Thực chèn liệu mẫu, sản phẩm public static async void InsertProduct() { using (var context = new ProductsContext()) { // Dùng đối tượng DbSet để thêm await context.products.AddAsync(new Product { Name = "Sản phẩm 1", Provider = "Công ty 1" }); // Dùng context để thêm await context.AddAsync(new Product() { Name = "Sản phẩm 2", Provider = "Công ty 1" }); // Thực Insert vào DB liệu đã thêm int rows = await context.SaveChangesAsync(); Console.WriteLine($"Đã lưu {rows} sản phẩm"); } } + Nếu muốn thêm lúc nhiều liệu dùng AddRangeAsync, nhận đối số mảng đối tượng var p1 = new Product() {Name = "Sản phẩm 3", Provider = "CTY A"}; var p2 = new Product() {Name = "Sản phẩm 4", Provider = "CTY A"}; var p3 = new Product() {Name = "Sản phẩm 5", Provider = "CTY B"}; await context.AddRangeAsync(new object[] {p1, p2, p3}); int rows = await context.SaveChangesAsync(); Console.WriteLine($"Đã lưu {rows} sản phẩm"); Cập nhật liệu EF + Muốn cập nhật liệu, việc thay đổi thuộc tính đối tượng đọc được, sau gọi context.SaveChangesAsync var pr = new Product() { ProductId = 4, Name = "Abc" }; var pr_e = context.Attach(pr); pr_e.Property(p => p.Name).IsModified = true; context.SaveChanges(); Xóa liệu EF + Để xóa liệu khỏi DB, việc yêu cầu xóa đối tượng khỏi DbContext phương thức Remove, gọi SaveChangesAsync để cập nhật // Xóa sản phẩm có ProductID = id public static async Task DeleteProduct(int id) { using (var context = new ProductsContext()) { // context.SetLogging(); var product = await (from p in context.products where (p.ProductId == id) select p ) FirstOrDefaultAsync(); // Lấy Product có ID if (product != null) { context.Remove(product); Console.WriteLine($"Xóa {product.ProductId}"); await context.SaveChangesAsync(); } } } ... 1.1 Mô tả hệ thống Một hệ thống kinh doanh cần có cơng việc sau: Nhập hàng Bán hàng Bộ phận bảo hành(sửa chữa) 1.1.1 Cơ cấu tổ chức phân cơng trách nhiệm Cửa hàng có chức vụ nhân viên: ... hàng cửa hàng Đầu ra:Cập nhật khách hàng vào hệ thống CHƯƠNG 2: PHÂN TÍCH VÀ CÀI ĐẶT DỮ LIỆU HỆ THỐNG *Chuẩn hóa liệu: Dạng chuẩn – 1NF (First Normal Form) Định nghĩa: Một bảng (quan hệ) gọi dạng... NVARCHAR(12) ID xe mà khách hàng đổi TINYINT Số lượng xe mà khách đổi 2.3:Cài đặt liệu vào hệ thống 2.3.1.Tạo sở liệu QuanLyBanXeDap -Tạo schema là:ban_hang,nhap_hang,san_pham,nhan_vien CREATE