វិច្ឆិកា
គ្រប់គ្រងទិន្នន័យ Database ដោយ C# +Dapper
♦ រៀបរៀងអត្ថបទដោយ លោក គឹម សូឡី នៅខែវិច្ឆិកា ឆ្នាំ ២០២២
♦ ដំបូងគួរស្គាល់អ្វីជា Dapper សិន!
Dapper អាចនិយាយបានថាវាជា tools សម្រាប់ជួយដល់អ្នកសរសេរកម្មវិធី .NET ឲ្យមានភាពងាយស្រួលក្នុងការគ្រប់គ្រងទិន្នន័យ Database តាមបែប Object Relational Mapping (ORM) ។ Dapper អាចប្រើបានជាមួយ Database ជាច្រើនប្រភេទដែលភ្ជាប់មកជាមួយ Data Providers របស់វា ក្នុងនោះមានដូចជា៖ Microsoft Access, Microsoft SQL Server, Oracle, SQLite, PostgreSQL និងដទៃទៀត ។
គោលបំណងនៃការប្រើប្រាស់ Dapper គឺជួយសម្រួលការសរសេរកូដឲ្យរហ័សជាងមុន និងមានប្រសិទ្ធភាពជាងមុន ។
មុននឹងអានបន្តទៀត សម្មតថាអ្នកធ្លាប់មានបទពិសោធន៍ជាមួយការសរសេរកូដ .NET ផ្សេងៗជាមួយនឹងទិន្នន័យ Database ខ្លះៗហើយដូចជា ADO.NET ជាដើម ។
បញ្ជាក់៖ យើងនឹងប្រើប្រាស់ .NET 4.5 + Console application + Dapper +Microsoft SQL Server ក្នុងអត្ថបទ នេះនឹងនាំអ្នកឲ្យយល់ពីការប្រើប្រាស់ដូចខាងក្រោម៖
- ទាញយកទិន្នន័យពី database ដោយផ្ដល់មកវិញជាតម្លៃទោល -Dapper Execute Scalar
- ទាញយកទិន្នន័យពី database ដោយផ្ដល់មកវិញជាសំណុំទិន្នន័យ -Dapper Query
- កែប្រែទិន្នន័យ លុបទិន្នន័យ និងការបញ្ចូលទិន្នន័យ -CRUD Dapper Execute
- ការប្រើប្រាស់ប៉ារ៉ាមែតផ្សេងៗរបស់ Dapper -Dapper Parameterized Query
- ទាញយកទិន្នន័យច្រើនសំណុំក្នុង query តែមួយ -Dapper Multiple Result
- អនុវត្តន៍ប្រតិបត្តិការច្រើនក្នុងពេលតែមួយ - Dapper Transaction
បញ្ចូលទិន្នន័យច្រើនជាសំណុំ -Dapper BulkInsert
១. យើងនឹងប្រើប្រាស់ Microsoft SQL Server សម្រាប់ជាឧទាហរណ៍ និងមាន Table ដូចខាងក្រោម៖
២. ចាំបាច់ត្រូវទាញយក Dapper ពី NuGet Library ទៅកាន់ Project របស់យើងសិន
សម្រាប់ Microsoft Visual Studio សូមចូលទៅកាន់ Tools>NuGet Package Manager>Package Manager Console
រួចប្រើ Command : PM> install-package Dapper [-Version ...]
ឧទាហរណ៍ : PM> Install-Package Dapper -Version 1.50.0 (Project កំពុងប្រើប្រាស់ .NET 4.5)
ឬប្រើប្រាស់ wizard ដោយ Right click លើឈ្មោះ Project> Manage NuGet Packages… រួចស្វែងរកពាក្យ Dapper និងជ្រើសរើស Version ណាមួយដែលត្រូវនឹង Project នោះ ឧទាហរណ៍ដូចជា .NET4, .NET4.5, .NET Core, .NET5, ឬ .NET6 ជាដើម ។
បន្ទាប់ពីទាញយក Dapper រួចរាល់ យើងនឹងអនុវត្តអំពីការប្រើប្រាស់ដូចតទៅ៖
s ទាញយកទិន្នន័យពី database ដោយផ្ដល់មកវិញជាសំណុំទិន្នន័យ -Dapper Query
ដើម្បីទទួលបានទិន្នន័យជាសំណុំ (IEnumerable) ជាទូទៅយើងត្រូវបង្កើត Model Class សម្រាប់តំណាងឲ្យទិន្នន័យដែលត្រូវទាញយកពី Database ដែលពេលនោះវានឹងធ្វើការផ្គូរផ្គងរវៀង SQL Select Statement ទៅនឹង Object របស់ Model class នោះ ។ គួររម្លឹកឡើងវិញថា នេះជាវិធីសាស្រ្ត Object Mapping របស់ Dapper ហើយយើងក៏អាចប្រើវាតាមបែប Dynamic Query ដោយមិនចាំបាច់មាន Model Class ក៏បានដែរ ។ សូមមើលឧទាហរណ៍ ៖
កូដខាងក្រោមនេះបានប្រើប្រាស់ប្រភេទទិន្នន័យជា dynamic ជំនួសឲ្យការបង្កើត Model class
s កែប្រែទិន្នន័យ លុបទិន្នន័យ និងការបញ្ចូលទិន្នន័យ -Dapper Execute
s ការប្រើប្រាស់ប៉ារ៉ាមែតផ្សេងៗរបស់ Dapper
តាមឧទាហរណ៍ដែលបានបង្ហាញកន្លងមក
db.Execute ("Insert Into tbl_Item (ItemID,ItemName) Values (1, 'Wallet') ") ;
យើងឃើញថាតម្លៃដែលបោះទៅកាន់ field នីមួយៗរបស់ Table គឺបោះដោយផ្ទាល់មិនតាមរយៈ Parameter ឡើយ ។ ឧទាហរណ៍ថាបើតម្លៃដែលត្រូវបញ្ចូលនោះមានផ្ទុកនូវសញ្ញាពិសេសណាមួយ (Special character) នោះ SQL Syntax នឹងមិនដំណើរការឡើយ
@ID និង @Name ជា parameter ចំណែកឯ new {ID, Name} គឺជា argument ត្រូវនាំតម្លៃទៅកាន់ Parameter នីមួយៗ ដែលបានកំណត់នៅក្នុង SQL Statement ។
ឧទាហរណ៍ផ្សេងទៀត៖
Dynamic Parameter
Dapper អាចឲ្យយើងប្រើប្រាស់ parameter ដោយមានលក្ខណៈជា dynamic បាន ។ នៅក្នុងការធ្វើ Project ជាក់ស្តែងវាពិតជាមានសារៈសំខាន់ណាស់សម្រាប់បត់បែនលក្ខខណ្ឌរបស់អ្នកប្រើប្រាស់ពេលទាញទិន្នន័យធ្វើរបាយការណ៍ ។ សូមមើលឧទាហរណ៍ខាងក្រោម៖
♦ ទាញយកទិន្នន័យច្រើនសំណុំក្នុង Query តែមួយ -Dapper Multiple Result
ករណីខ្លះយើងក៏អាចទាញយកទិន្នន័យចេញពី table ផ្សេងៗក្នុងពេលតែ១ ដោយផ្ដល់មកវិញជាសំណុំនៃសំណុំ ។
(បញ្ជាក់៖ សូមបង្កើត table tbl_purchase និង Model class Purchase បន្ថែមតាមជាក់ស្តែង)
♦ អនុវត្តប្រតិបត្តិការច្រើនក្នុងពេលតែមួយ - Dapper Transaction
Transaction ជាអ្វីដែលយើងត្រូវតែដឹងមិនថាប្រើនៅក្នុង ADO.NET ឬ Dapper នោះទេ គឹប្រើនៅពេលត្រូវអនុវត្ត command ច្រើនក្នុងពេលតែមួយដោយប្រាកដថា command ទាំងអស់នោះមិនមានមួយណាerror ដែលនាំឲ្យទិន្នន័យខុសប្រក្រតី សូមមើលឧទាហរណ៍ខាងក្រោម៖
(បញ្ជាក់៖ សូមបង្កើត table tbl_activity_log បន្ថែមតាមជាក់ស្តែង)
Commands ទាំងពីរដែលបានអនុវត្តនៅក្នុងប្លុក try {} ត្រូវបានគ្រប់គ្រងដោយ transaction object តែមួយ ដូច្នេះបើមាន command មួយណា error នោះ
Transaction ទាំងមូលនឹងច្រានចោល command ទាំងអស់នោះដោយមិនប៉ះពាល់ដល់ database ឡើយ ។
♦ បញ្ចូលទិន្នន័យច្រើនជាសំណុំ -Dapper BulkInsert
BulkInsert ជាវិធីសាស្រ្តបញ្ចូលទិន្នន័យទៅក្នុង Database ក្នុងករណីយើងមានទិន្នន័យច្រើន record ដោយអនុវត្តតែមួយដង ពោលគឺមិនចាំប្រើ loop ឲ្យធ្វើការច្រើនដងនោះឡើយ ។
♦ សង្ខេប
· គោលបំណងនៃការប្រើប្រាស់ Dapper គឺជួយសម្រួលការសរសេរកូដឲ្យរហ័សជាងមុន និងមានប្រសិទ្ធភាពដំណើរការជាងមុន ។
· Dapper អាចប្រើបានជាមួយ database ច្រើនប្រភេទដោយពឹងផ្អែកទៅលើ IDbConnection ដើម្បីធ្វើការជាមួយនឹង Data Provider របស់ Database នោះ ។
· Dapper ជា Open source Library Package ដែលអាចទាញយកដោយសេរីពី NuGet Library
· Multi-Query Support
· BulkInsert Support
· Dapper អាចទាញទិន្នន័យមកផ្ទុកបានទាំងប្រភេទទិន្នន័យធម្មតា និងប្រភេទទិន្នន័យដែលមានភាពស្មុគ្រស្មាញ ។
· Dapper ជា ORM ដ៏ល្អមួយក្នុងចំណោម ORM ជាច្រើនទៀត ហើយយើងក៏អាចប្រើប្រាស់វិធីសាស្រ្តផ្សេងៗបញ្ចូលគ្នាអាស្រ័យលើភាពបត់បែនរបស់យើងជា Programmer ផងដែរ ៕
មតិ និងយោបល់ទៅលើអត្ថបទនេះ (តាម Facebook)
ខាងក្រោមនេះជាយោបល់ផ្សេងៗរបស់អ្នកទស្សនា