සෝස් කෝඩ් එක සහ නොට් එකට මේකෙන් යන්න පුළුවන්
ගුනේගේ කේක් කඩේ නොහොත් Project "Gune"
ඔන්න එහෙනම් කිව්ව විදිහටම වැඩේ පටන් ගත්තා. උබලට මේක ටිකක් වෙනස් විදිහට පෙනෙයි. මොකද මේක කියල දෙන්නේ බාබා ලන්තේ ඉන්න උන්ට නෙමේ හින්දා මගේ ගුරා මට කියලා දුන්නා විදිහට. ඒ කියන්නේ තල්ලු කරලා පීනන්න කියන තියරි එකට
ඔන්න උබලගේ පැත්තේ කඩයක් තියනවා. උ හදන්නේ ස්පොන්ජ් කේක්. මේකේ ස්පොන්ජ් කේක් වර්ග ගොඩක් තියනවා.මේ යකා එහෙම නිකන් ආවාට ගියාට කේක් දෙන්නේ නැ. පොර ඔර්ඩර් වලට විතරයි දෙන්නේ. උගේ කේක් ම කන සෙට් එකක් ඉන්නවා. ඉතින් ඔර්ඩර් වලට තමා කේක් හදන්නේ.
මේ පොරට ඕනේ කස්ටමර් ලට වෙබ් එකෙන් කේක් ඔර්ඩර් කරන්න. උ සැහෙන්න රට යන එකෙක් ඒ නිසා වෙබ් එකෙන් තමා උ හුගක් දේවල් කරගන්නේ.
වැදගත්ම දේ මේ පොර උබේ ලගට එනවා මේකට හරියන මොකක් හරි මගුලක් කරලා දීපන් කියලා. උ නං කියයි මගුල කියලා. දැන් අපි මොකද කරන්නේ? දැන් ඉතින් උබලගේ දිග්ගිරි එක ගත්ත කැම්පස් එක මතක් කරගෙන මේකට විසදුමක් දෙන්න ඕනේ.
“හරි ලොක්කා වැඩේ කරමු. මේකට වෙබ් එකෙන් නිකන් වෙබ් සයිට් එකක් වගේ එකක් කරමු. හැබැයි මේක වෙබ් සයිට් එකක්ම නෙමේ පොඩි සොෆ්ට්වයර් එකක් වගේ එකක්.”
“උබ කියනවනම් ඕනේ එකක්. මේ රට ගියාම සෙල් එක එහෙම බලාගන්න පුලුවන්ද? ඒ වගේම ච්කස්ටමර් ලට ෆීඩ් බැක් එකක් ප්රමෝෂන් එකක් වගේ කරන්න පුළුවන් වෙයි නේද?”
“ඔව් පුළුවන්. හැබැයි මේකෙන් රෙදි සෝදන්න පාරට තාර දන්නා වගේ හැම දේම ඉල්ලන්න එපා යකෝ. මුලින් උබට මම කස්ටමර් ට ඔර්ඩර් කරන ටික හදලා දෙන්නම්. පස්සේ මේක ටික ටික ලොකු කරගමු”.
රෙදි නැතිව පිනිම - Identify Objects
කස්ටමර් ට ඕනේ දේ දැන් උබලා දන්නවනේ. ඕකෙන් කියන ඔක්කොම නාම පද ඔබ්ජෙක්ට් එකක් එහෙම නැත්නම් ක්ලාස් එකක් වෙනවා.
“උබලගේ පැත්තේ කඩයක් තියනවා” – Company
“හදන්නේ ස්පොන්ජ් කේක්” – Products
“පොර ඔර්ඩර් වලට විතරයි දෙන්නේ” - “Orders”
“මේ පොරට ඕනේ කස්ටමර් ලට..” - Customers
දැන් උබලා කැමති විදිහකට මේක ඩිසයින් කරගන්න පුළුවන්. ඕනේ diagram එකක් ඇදගන්න පුළුවන්. උදව්වක් ඕනේ නම් දෙන්නම් . කරලා පෙන්නන. මේක තමා සිම්පල් ම ක්රමේ.
Service Oriented Architecture
මේ වැඩේ කරනකොට තියන ප්රදානම දෙයක් තමා වෙබ් එකේ වෙන්න ඕනේ. ඉතින් මේකට ඕනෙම වෙබ් technology එකක් පාවිච්චි කරන්න පුළුවන්. අපි බලන්නේ මේක SOA විදිහට කරන්නේ කොහොමද කියලා.
පෙර කාලේ ඒ කියන්නේ අපි ඉගෙන ගන්න කාලේ තිබ්බේ Client Server architecture එක . ඒ කියන්නේ සර්වර් එකක් තියනවා. එකට සම්බන්ද උන කම්පුටර් වල ඉදන් අරකේ තියන database එක පාවිච්චි කරලා වැඩ කරනවා. මේක ඉතින් ඉන්න තැන ඉදන් විතරයි කරන්න පුළුවන්. සැහෙන පාඩු තියනවා .පස්සේ කලෙත් එක්ක එක්ක මේක වෙනස් උනා. ඒ කියන්නේ මේක කැඩුවා layer කීපයකට. එකට කිව්වේ 3-Tire architecture කියලා
1. Data Access layer
2. Business Logic layer
3. UI layer
මේ 3-Tire architecture සැහෙන්න පාවිච්චි උනා . ඒ වෙබ් එක දියුණු වෙනකන් විතරයි. වෙබ් එකේ දියුණුවත් එක්ක කට්ටියට ඕනේ උනා මේකේ Database එක වෙනම තැනක තියාගන්න. BL එක වෙනම තැනක. UI එක වෙනම තැනක තියාගන්න. ඉතින් එකට අපු විසදුම තමා මේ SOA
මේකේ පලවෙනි එක තමා Detabase එක . එක ගැන වැඩිය කියන්න ඕනේ නැති නිසා කියන්නේ නැ. එත් පරණ SQL වලට වඩා අලුත් Versions මේ SOA වලට හුගක් උදව් කරනවා .
Data Access Layer
අනේ ඉතිං පරණ ADO.Net වලට පින් සිද්ද වෙන්න ඉස්සර අපි Database එකේ ඉදන් ඩේට එහෙ මෙහෙ කරගත්තා. එත් ඒ කරපු උන්දැලා දන්නවනේ එකේ තියන අමාරුව. Custom Library ගහගෙන වැඩ කරන්න ඕනේ.
ඔය යටි බඩේ මෙන්සස් අමාරුව තේරුම් ගත්ත පින්වත්තු සෙට් එකක් හැදුවා Entity Framework කියලා එකක්. එකෙන් වෙන්නේ සරලවම SQL Data Table එකක් අපේ ප්රෝග්රෑම් එකේ Object වලට හරවලා දෙනවා. මේකෙදි
1 row of a table = 1 object of curesponding Class
හිතන්න customer table එකේ තියනවා එක row එකක්.
-------------------------------
Customer Name | Age
-------------------------------
Haneo | 21
-------------------------------
EF වලින් මේක අපිට Customer object එකක් විදිහට හදලා දෙනවා.
ඉස්සර ඉක පුරාගෙන කරපු දේවල් දැන් එක ලයින් එකෙන් කරගන්න පුළුවන්.
Dapper කියන එකත් මේ වගේම එකක්. මේ දෙකේ වෙනස් කම් තියනවා. අපි ඒවා පස්සේ කතා කරනවා.
Business Logic
ඉස්සර මේකෙදි කලේ අර Analysis කරලා Design කල දේවල් ටික Functional Methods ටිකක් විධිහට ගහගන්න එක. දැන් එහෙම නෙමේ.
දැන් අපි කරන්නේ එකට එකක් සම්බන්ද වෙන Function එකම තැනකින් දෙන එක. මේ ක්රමේදී තියන වාසිය තමා වෙන වෙන දේවල් වලට වෙන වෙනම functions අවශ්ය නොවීම. හැම දේට එකම තැනකින් කරගන්න පුළුවන් කම.
මේක තේරෙන්නේ නැනේ මෙහෙම කියන්නම්. අපේ මුලින් කතා කල දේවල් හැම එකේම ඒ කියන්නේ
1. Customer
2. Orders
3. Products
4. Company
ඕනේ වෙන දෙයක් තමා
1. රෙකොර්ඩ් එකක් සේව් කරගන්න
2. රෙකොර්ඩ් ඔක්කොම ගන්න.
3. අප්ඩේට් කරන්න
4. ඩිලීට් කරන්න.
ඉතින් අපි මේ හැම එකටම එක තැනක් තියාගන්නවා . එකට තමා Repository එකක් කියන්නේ. මේක සම්බන්ද වෙනවා Software design Patterns වල Repository Pattern එකට
දැනට ඔය රතු පාට T කියන ලබ්බ අමතක කරන්න ඕනේ උබලා.
එහෙම කරලා බැලුවොත් අර උඩින් තියන Customer, Product , Company ,Order හැම ටම මේ ටික කරගන්න ඕනේ නේද?
ඉතින් සරලව කිව්වොත් ඔය T වෙනුවට උබලා Customer දැම්මොත් ඔය Repository එක CustomerRepository එකක් වෙනවා. ඕකට Product දැම්මොත් එක Product Repository එකක් වෙනවා
.
ඕක හරියට අර 2 කට ලව් කරන කෙල්ලෙක් ඒ ඒ කොල්ලා ලගදි උට ඕනේ විදිහට වෙනස් වෙනවා වගේ තමා. එකයි තියෙන්නේ ගඩොල් ස්ච්චුව වගේ .දාන මතට මොක උනත් අචුචුවේ විදිහට ගල් එන්නේ
Unit Of Work නොහොත් එක ගෙයි කෑම
ඔන්න පුතාලා දැන් තමා වැඩේ අමාරු හරිය. දැන් හිතන්න අපිට ඕනේ දෙයක් කරගන්න පුළුවන් තෝර් ගේ මිටිය වගේ එක තියනවා. ඒ තමා Repository eka.
මට කරගන්නොනේ මෙහෙම එකක්.
මේක ඔපරේට් කරන එකා ඔර්ඩර් එකක් දානවා. අන්න එතකොට අපිට මේ වැඩ ටික එක පර කරගන්න වෙනවා.
1. Order එක සේව් කරන්න ඕනා
2. Order එකේ තියන අයිටම් ටික සේව් කරන්න ඕනේ
3. Stock එක වෙනස් කරන්න ඕනේ (අඩු)
දැන් පේනවද? අපිට මේ ටික වෙන වෙනම කරන්න පුළුවන්. එත් එකක් හරි උනේ නැත්නම් හුටා තමා. ඉතින් මේ තුනම එක යුනිට් එකක් වෙන්න ඕනේ.එකට වෙන්න ඕනේ
ඉතින් අර වෙන වෙනම තියන repository වලින් අපිට ඕනේ වැඩ ටික කරගන්න අපි යුනිට් හදාගන්නවා. මේකට තම unit of work කියන්නේ . මේකත් Software design pattern එකක් පුතිලා
Back End Service
හරි දැන් මෙහෙම හිතමු , ඔන්න මගේ ඇප් එකේ තියනවා ඔර්ඩර් එකක් දාන තැන. එතන තියනවා සේව් කියලා බට්න් එකක් . දැන් මේක ප්රෙස් කලාම අර ඔර්ඩර් එක සව වෙන්න ඕනේ. එහෙමත් නැත්නම් අර ඔර්ඩර් සේව් කරන Unit OF work එක ඇහැරවලා එකෙන් වැඩ ගන්න ඕනේ.
ඉතින් අපිට නිකන් මේ UOM එකට කතා කරන්න බැ වෙබ් එක හරහා. එකට වෙබ් සර්විස් එකක් හරහා කරන්න ඕනේ. වෙබ් සර්විස් එකක තියනවා end Point එකක් මේ ඔර්ඩර් එක සේව් කරන .එකට අර ඩේටා ටික යැව්වම එකෙන් Order Unit OF work ekata ඩේටා ටික දෙනවා. එකෙන් ඩේටා බේස් එකට සේව් කරනවා.
හරි දැන් කියෙව්වා ඇති වැඩේට බහිමු. මුලින්ම තියෙන්නේ Visual Studio Project එකක් අරගෙන එකේ layers ටික කඩා ගන්න එක. ඒ ටික මම එන්ගිරිස් වලින් කොටන්නම් හොදේ.
මුලින්ම තියෙන්නේ අපේ Class ටික හදාගන්න. මේකට සාමන්යෙන් කියන්නේ Domain එක කියලා. සමහරු කියනවා model එක කියලත්. එක වෙනම project එකක්
1. Open Visual Studio and File>> New Project
2. Fill the form as shown in picture
මේ වෙනකොට අපි solution එකක් හදලා නැනේ. මේකෙන් වෙන්නේ
1. Create a solution called “Gune”
2. Create Project name “Gune.Domain”
ඒ කියන්නේ Gune කියන සොලුෂන් එක ඇතුලේ “Gune.Domain” කියන ප්රොජෙක්ට් එක තියෙනවා. මේකෙන් Namespace හොයාගන්න ලේසි වෙනවා. අපි ප්රෝජෙච්ට් 20 ක් විතර තියන solution එකක වැඩ කරනකොට මේක හුගක් වැදගත්.
දැන් ඉතින් අපේ අර තියන Class 4 මේකට දාගන්න ඕනේ. මම නම් ඉතාමත් සරලව කරන්නේ. උබලාට ඕනේ නම් වැඩිපුර Fileds දාගෙන කරන්න.
වැදගත් දෙයක් කියන්න ඕනේ. Class වල නම් දානකොට ඒක වචනෙන් දාන්න ඕනේ. මොකද EF එකෙන් එක බහු වචන කරලා තමා ටේබල් නේම් එක හදන්නේ. සහ CamelCase වලින් නම් තියෙන්න ඕනේ. විශේෂයෙන් ස්ටර්ටර් ලා මේවා හරියට පිළිපදින්න ඕනේ. නැත්නම් ගුටි කන්න වෙන්නේ . Code Clearance , Comments , Scope Clearance කියන ඒවා නිකන් ගෙවල් සුද්ද කරලා පිරිසිදු කරලා තියාගන්නවා වගේ කරන්න ඕනේ.
මම නම් හදාගත්තේ මේ විදිහට. ඉස්සරහට යනකොට මේකේ Properties වැඩි කරන්න වෙනවා.
“Gune.Data” Project
දැන් අපේ මොඩල් එක එහෙමත් නැත්නම් වැඩ කරන ඩොමෙන් එක හදලා ඉවරයි. දැන් තියෙන්නේ EF එකෙන් SQL server එකත් එක්ක ගනුදෙනු කරන එක. අපිට ඕනේ නම් පුළුවන් උඩින් කිව්වා Domain Project එකේම මේක කරන්න . එත් හැම දේම පිළිවෙලක් වෙන නිසා තමා මේක වෙනම Project එකකට ගත්තේ.
අපි Entity Framework එක අපේ C# වලට දාගේම එක Configure කළා කියන්නේ අපේ ලග අර database එකේම කොපි එකක් තියනවා වගේ. හැබැයි ඩේටා නැතුව. එකට කියන්නේ “Schema Only” කියලා. බලමු කරන්නේ කොහොමද කියල.
මුලින්ම අලුත් ප්රොජෙක්ට් එකක් හදන්නේ ඕනේ
“Gune.Data” . මේකත් Class Library ටයිප් එකේ එකක්.
Install EF
දැන් කරන්න ඕනේ මේකට Entity Framework එක ඉන්ස්ටෝල් කරන එක. එකට අපිට තියනවා නගෙට් පැකේජ් මැනේජර් (Nugget Package Manager) . කියන එක. මේක වෙන්නේ මෙහෙමයි. ලෝකේ වටේ ඉන්න දිවලොප් කරන ය එකතු වෙලා මේ වගේ ප්රයෝජනවත් කොම්පොනන්ට් හදලා තියනවා. ඒවා හුගක එකතුවක් තමා නගෙට් පැකේජ් මැනේජර් (Nugget Package Manager) කියන්නේ. අපි කරන්නේ එක හරහා එකේ තියන Entity Framework එක දාගන්න එක.
ඕනෙම ප්රොජෙක්ට් එකක හෝ Solution eke
1. Right Click on solution or project.
2. select “Manage Nuget Packages”
දැන් ඉහත ආකාරයට අදාළ එක සිලෙක්ට් කරගෙන ඉන්ස්ටෝල් බටන් එකෙන් ඉන්ස්ටෝල් කරගන්න ඕනේ
Configure EF
හොදා දැන් කරන්න තියෙන්නේ අපේ EF එක configure කරගන්න එක. මේකෙදී
1. Add Class name “MainDBContext” to your Data Project
2. Inherite it with “DbContext” . DbContext is the most important class in the EntityFreamwork
3. Overide the base class constructor .
DbContext කියන එක ගන්න බැරි නම් ඒ කියන්නේ EF එක ඉන්ස්ටෝල් වෙලා න කියන එක.
:Base(“SysCon”) කියන එකෙන් කලේ අර ඉන්හෙරිට් කරපු DbContext ක්ලාස් එකේ තියන Constructor එක Overide කළා . එහෙම කරන කොට එකට Connection String එකේ නම දෙන්න ඕනේ. මේකෙදි එකේ නම “SysCon”.
දැන් මේ “SysCon” කියන Connection String එක ප්රොජෙක්ට් එකක Config File එකට දාන්න ඕනේ. දැනට අපි එකත් මේකෙම දාගන්නවා.මතක තියාගන්න EF එක මේ SysCon කියන එක හොයන්නේ “StartUp Project” එකේ Config ෆයිල් එකේ කියලා.
Add “SysCon” to Config
1. Open app.config file in Data Project
2. Add Connection string as Following figure
මේක නම් හුගක් දෙනෙක් දන්නවනේ. නොදන්නා ය අහන්න ඕනේ කියලා දෙන්නම්. මේකේ වෙන්න ඕනේ එකම දේ තමා
name එක “SysCon”. වෙන්න ඕනේ එක.
DBSet
දැන් මේ පුතිලා මෙහෙම හිතන්න ඕනේ.
MainDBContext එක කියන්නේ අපේ ප්රෝග්රෑම් එක ඇතුලේ DetaBase එක වගේ. එහෙනම් කෝ එකේ Tables?
අන්න එකට තමා මේ DbSet තියෙන්නේ. ඔයාලට පුළුවන් මේ MainDBContext එක ඇතුලේ ඕනේ තරම් DbSet හදාගන්න . ඒ හදන හැම එකක්ම අවසානයේ SQL Server එකේ ටේබල් එකක් වෙනවා. හදන්නේ මෙහෙමයි
මේ වගේ අර අනික් 4 ම හදාගන්න ඕනේ. මේ වගේ
හක්ක පනින වැඩේ (DB Migrations)
දැන් පුතිලා අපි MainDBContext එක හැදුවා . එකේ DbSet 4 ක් හැදුවා . ඒ කියන්නේ SQL server එකේ ඩේටා බේස් එකක් හදලා එකේ ටේබල් 4 ක් හැදුවා වගේ. වැඩේ කියන්නේ තාම SQL දන්නේ නැ අපි මෙහෙම දෙයක් කළා කියලා. එකට අපි පොරට (SQL server) එකට කියන්න ඕනේ අපි මෙහෙම වැඩක් කරලා තියෙන්නේ කියලා. එකට තමා Migrate කරනවා කියන්නේ.
කරන්න තියන වැඩේ සිම්පල්. මුලින්ම යන්න ඕනේ “Package Manager Console” එකට. එක ගන්න විධිහ පහත රුපෙන් පෙනේවි .
දැන් එකේ අපේ පලවෙනි කමාන්ඩ් එක රන් කරන්න ඕනේ එක තමා
මේක මේ විදිහටම තියෙන්න ඕනේ. වැරදුනොත් එහෙම රතු පාටින් ලේ ගංගාවක් ගැලුවා වගේ එයි.
මේකෙන් වෙන්නේ අපි කියනවා දැන් අපි SQL එක්ක ගනුදෙනු කරන්න ලෑස්තියි කියලා.
මේක රන් කලාම අපිට EF එකෙන් හදලා දෙනවා Configuration ෆයිල් එකක්. එකේ Constructor එකේ තියනවා
කියලා . මේක True. කරන්න ඕනේ. ඒ කියන්නේ අපි කරන වෙනස් කම් automatically database එකට ගහන්න කියන එක සරලවම
අන්තිම කමාන්ඩ් එක තමා
-f කියන්නේ force කරලා වෙනස්කම් අප්ඩේට් කරන්න කියන එක.
-script කියන්නේ අපිට හැදෙන SQL script එක පෙන්නන කියන එක.
දැන් එනවා ලස්සන script එකක් ඔයාගේ ඔය C# ඇතුලේ හදපු schema එක ට අදාලව SQL script එක. –script ටැග් එක අයින් කරලා ආයි රන් කලොත් SQL Server එකේ Database එක හැදේවි
ඔන්න දැන් අපි ඩේටාබේස් එක හැදුවා C# ඇතුලේ ඉගෙන. දැන් ඔයාල අර මොඩල් එකට මොනයම් හෝ වෙනසක් කලොත්
වලින් ඒ වෙනසක් කම ඩේටා බේස් එකට දාගන්න පුළුවන්.
==========================================================================
Repository(රෙපොසිටෝරි)
දැන් තියන විදිහට ටයිප් කරන්න සැහෙන අමාරුයි. ඒ උනාට යමු ඉස්සරහට. අපි මුලින්ම කිව්වා විදිහට දැන් තමා ඔක්කොම එක තැනින් කරන මැජික් එක කරන්න යන්නේ.
මුලින්ම අපි හදාගන්න ඕනේ අලුතින් ප්රොජෙක්ට් එකක්
“Gune.Repository”
රෙපොසිටෝරි එකක් කියන්නේ එකතුවක් නේ. ඉතින් මේ එකතුව අපි මුලින් හරියට පෙළ ගස්වා ගන්න ඕනේ. එකට අපිට තියනවා Interfaces කියලා ජාතියක්. හැමෝම මේක දානවා. Interfaces වල තියන හොද ගතිය අපිට එතැනදී මොකුත් දෙන්න ඕනේ න. ඔහේ මෙතඩ් හදාගෙන යන්න පුළුවන්. ඉතින් මේක පාවිච්චි කරලා අපි Template එකක් හදාගන්නවා වැඩේට හරියන්න.
මේකේ මේ T කියන එක වෙනුවට අපිට ඕනේ එකක් පාස් කරන්න පුළුවන්. මම කරන්නේ ඕකට මුලින් දානවා මෙහෙම එකක්.
දැන් මේ T එක වෙනුවට යවන්න පුළුවන් Class එකක් විතරයි. මේකට අපි කියනවා
Constraints on type parameters කියලා
වැඩි විස්තර සදහා.
https://docs.microsoft.com/en-us/do...guide/generics/constraints-on-type-parameters
ඒ වගේම මේ T කතාව තේරුනේ නැත්නම් අහන්න ඕනේ.
RepositoryBaseMain
දැන් අරක පාවිච්චි කරලා අපේ ප්රදාන Repository එක හදාගන්න තමා යන්නේ. එකට කරන්න තියෙන්නේ අර හදාගත්ත Interface එක Implement කරන එක.
මේ විදිහට කලාම හරි.
මේකෙදි වෙන්නේ අර interface එකට අපි දාන Class එකම RepositoryBaseMain class එකටත් පාස් වෙනවා.
අපි Customer පාස් කලොත් Customer RepositoryBaseMain ekak හැදෙන්නේ මෙන්න මේ වෙලාවේදී. interface එකක් implement කරන කොට එකේ තියන හැම method එකක්ම implement කරන්න ඕනේ.
දැන් අපිට තියෙන්නේ කලින් හදාගත්ත MainDbContext එක පාවිච්චි කරලා මේ මෙතඩ් ටික හරියට හදාගන්න එක.
ඔන්න උඩින්ම DBContext එකෙන් instance එකක් හදාගත්තා.
ඒ වගේම DBSet එකෙනුත් එකක් හදාගත්තා.
මේ දෙකෙන් කියවෙන්නේ අර උඩින් එන T එක Customer nam
DBSet<T> = Customer table
මෙහෙම දැනට හිතාගන්න.
Method Implementation
දැනට මම පෙන්නනම් FindAll() මෙතොඩ් එක කොහොමද සම්පුර්ණ කරන්නේ කියලා.
හරිම ලේසි දැන් අපිට තියනවා උඩින් එන ඕනෙම Class එකකට අදාළ වෙන ටේබල් එකක්
ඉතින් මේකේ තියනවා අර ටේබල් එකේ තියන ඔක්කොම රෙකොර්ඩ්ස් . හරිම ලේසි
ID එකෙන් find කරගන්න ඕනේ නම්
මේකෙන් කලේ අර ටේබල් එකේ id එකෙන් Find එකක් ගැහුවා. ඒ කියන්නේ ලිස්ට් එකක
Find එකක් වගේ
මේක පාවිච්චි කරන විදිහ
1. ලයින් 26 න පෙන්නේ අපි අර “Gune.Data” ප්රොජෙක්ට් එකේ හදාගත්ත MainDbContext එකෙන් instance එකක් හදාගත්තා. ඒ කියන්නේ ඩේටා බේස් එක අතේ තියනවා වගේ.
2. RepositoryBaseMain කිව්වේ අර කොල්ලෝ දෙන්නෙක් ලදී දෙවිදිහකට ඉන්න කෙල්ලෙක් වගේ . එකේ T මගුල වෙනුවට මෙතැනදී අපි දුන්නේ Customer Class එක. දැන් පේනවද? ඊලග ලයින් එකෙන් තියෙන්නේ ඔක්කොම Customar la ගන්න එක. මොකද අපි ඇතුලට දෙන type එකෙන් තමා අපහු පිටට result denne
3. ඒ වගේම එකෙන්ම අපි එක රෙකොර්ඩ් එකක් ගත්තා.
4. ඔන්න දැන් කෙල්ල වෙස් මාරු කළා. දැන් දාගත්තා product කියන වෙස් මුණ. දැන් ඉතින් එලියට එන හැම එකම සහ ඇතුලට යන හැම එකම product එකක් හෝ ගොඩක්
මේ මුල අත රිදෙනවා බන් දැන්. ඕනේ කම තිබ්බට සිංහලෙන් කොටන රගේ අද තමා දැනුනේ. මේකේ අනන්තවත් ප්රශ්න ඇති ඒවා අහන්න ඕනේ.
මේකේ පාඩම් අංක දෙක.
Data Access With Dapper and Web-API Services
Project Source Code eka passe dannam
ජය
Code:
[URL="http://www.elakiri.com/forum/showthread.php?p=23242975#post23242975"]http://www.elakiri.com/forum/showthread.php?p=23242975#post23242975[/URL]
ගුනේගේ කේක් කඩේ නොහොත් Project "Gune"
ඔන්න එහෙනම් කිව්ව විදිහටම වැඩේ පටන් ගත්තා. උබලට මේක ටිකක් වෙනස් විදිහට පෙනෙයි. මොකද මේක කියල දෙන්නේ බාබා ලන්තේ ඉන්න උන්ට නෙමේ හින්දා මගේ ගුරා මට කියලා දුන්නා විදිහට. ඒ කියන්නේ තල්ලු කරලා පීනන්න කියන තියරි එකට
ඔන්න උබලගේ පැත්තේ කඩයක් තියනවා. උ හදන්නේ ස්පොන්ජ් කේක්. මේකේ ස්පොන්ජ් කේක් වර්ග ගොඩක් තියනවා.මේ යකා එහෙම නිකන් ආවාට ගියාට කේක් දෙන්නේ නැ. පොර ඔර්ඩර් වලට විතරයි දෙන්නේ. උගේ කේක් ම කන සෙට් එකක් ඉන්නවා. ඉතින් ඔර්ඩර් වලට තමා කේක් හදන්නේ.
මේ පොරට ඕනේ කස්ටමර් ලට වෙබ් එකෙන් කේක් ඔර්ඩර් කරන්න. උ සැහෙන්න රට යන එකෙක් ඒ නිසා වෙබ් එකෙන් තමා උ හුගක් දේවල් කරගන්නේ.
වැදගත්ම දේ මේ පොර උබේ ලගට එනවා මේකට හරියන මොකක් හරි මගුලක් කරලා දීපන් කියලා. උ නං කියයි මගුල කියලා. දැන් අපි මොකද කරන්නේ? දැන් ඉතින් උබලගේ දිග්ගිරි එක ගත්ත කැම්පස් එක මතක් කරගෙන මේකට විසදුමක් දෙන්න ඕනේ.
“හරි ලොක්කා වැඩේ කරමු. මේකට වෙබ් එකෙන් නිකන් වෙබ් සයිට් එකක් වගේ එකක් කරමු. හැබැයි මේක වෙබ් සයිට් එකක්ම නෙමේ පොඩි සොෆ්ට්වයර් එකක් වගේ එකක්.”
“උබ කියනවනම් ඕනේ එකක්. මේ රට ගියාම සෙල් එක එහෙම බලාගන්න පුලුවන්ද? ඒ වගේම ච්කස්ටමර් ලට ෆීඩ් බැක් එකක් ප්රමෝෂන් එකක් වගේ කරන්න පුළුවන් වෙයි නේද?”
“ඔව් පුළුවන්. හැබැයි මේකෙන් රෙදි සෝදන්න පාරට තාර දන්නා වගේ හැම දේම ඉල්ලන්න එපා යකෝ. මුලින් උබට මම කස්ටමර් ට ඔර්ඩර් කරන ටික හදලා දෙන්නම්. පස්සේ මේක ටික ටික ලොකු කරගමු”.
රෙදි නැතිව පිනිම - Identify Objects
කස්ටමර් ට ඕනේ දේ දැන් උබලා දන්නවනේ. ඕකෙන් කියන ඔක්කොම නාම පද ඔබ්ජෙක්ට් එකක් එහෙම නැත්නම් ක්ලාස් එකක් වෙනවා.
“උබලගේ පැත්තේ කඩයක් තියනවා” – Company
“හදන්නේ ස්පොන්ජ් කේක්” – Products
“පොර ඔර්ඩර් වලට විතරයි දෙන්නේ” - “Orders”
“මේ පොරට ඕනේ කස්ටමර් ලට..” - Customers
Assignment 1: Identify other objects in the system. and mark all possible object . also create ER diagram as you can.
දැන් උබලා කැමති විදිහකට මේක ඩිසයින් කරගන්න පුළුවන්. ඕනේ diagram එකක් ඇදගන්න පුළුවන්. උදව්වක් ඕනේ නම් දෙන්නම් . කරලා පෙන්නන. මේක තමා සිම්පල් ම ක්රමේ.
Service Oriented Architecture
මේ වැඩේ කරනකොට තියන ප්රදානම දෙයක් තමා වෙබ් එකේ වෙන්න ඕනේ. ඉතින් මේකට ඕනෙම වෙබ් technology එකක් පාවිච්චි කරන්න පුළුවන්. අපි බලන්නේ මේක SOA විදිහට කරන්නේ කොහොමද කියලා.
පෙර කාලේ ඒ කියන්නේ අපි ඉගෙන ගන්න කාලේ තිබ්බේ Client Server architecture එක . ඒ කියන්නේ සර්වර් එකක් තියනවා. එකට සම්බන්ද උන කම්පුටර් වල ඉදන් අරකේ තියන database එක පාවිච්චි කරලා වැඩ කරනවා. මේක ඉතින් ඉන්න තැන ඉදන් විතරයි කරන්න පුළුවන්. සැහෙන පාඩු තියනවා .පස්සේ කලෙත් එක්ක එක්ක මේක වෙනස් උනා. ඒ කියන්නේ මේක කැඩුවා layer කීපයකට. එකට කිව්වේ 3-Tire architecture කියලා
1. Data Access layer
2. Business Logic layer
3. UI layer
මේ 3-Tire architecture සැහෙන්න පාවිච්චි උනා . ඒ වෙබ් එක දියුණු වෙනකන් විතරයි. වෙබ් එකේ දියුණුවත් එක්ක කට්ටියට ඕනේ උනා මේකේ Database එක වෙනම තැනක තියාගන්න. BL එක වෙනම තැනක. UI එක වෙනම තැනක තියාගන්න. ඉතින් එකට අපු විසදුම තමා මේ SOA
මේකේ පලවෙනි එක තමා Detabase එක . එක ගැන වැඩිය කියන්න ඕනේ නැති නිසා කියන්නේ නැ. එත් පරණ SQL වලට වඩා අලුත් Versions මේ SOA වලට හුගක් උදව් කරනවා .
Data Access Layer
අනේ ඉතිං පරණ ADO.Net වලට පින් සිද්ද වෙන්න ඉස්සර අපි Database එකේ ඉදන් ඩේට එහෙ මෙහෙ කරගත්තා. එත් ඒ කරපු උන්දැලා දන්නවනේ එකේ තියන අමාරුව. Custom Library ගහගෙන වැඩ කරන්න ඕනේ.
ඔය යටි බඩේ මෙන්සස් අමාරුව තේරුම් ගත්ත පින්වත්තු සෙට් එකක් හැදුවා Entity Framework කියලා එකක්. එකෙන් වෙන්නේ සරලවම SQL Data Table එකක් අපේ ප්රෝග්රෑම් එකේ Object වලට හරවලා දෙනවා. මේකෙදි
1 row of a table = 1 object of curesponding Class
හිතන්න customer table එකේ තියනවා එක row එකක්.
-------------------------------
Customer Name | Age
-------------------------------
Haneo | 21
-------------------------------
EF වලින් මේක අපිට Customer object එකක් විදිහට හදලා දෙනවා.
ඉස්සර ඉක පුරාගෙන කරපු දේවල් දැන් එක ලයින් එකෙන් කරගන්න පුළුවන්.
Dapper කියන එකත් මේ වගේම එකක්. මේ දෙකේ වෙනස් කම් තියනවා. අපි ඒවා පස්සේ කතා කරනවා.
Business Logic
ඉස්සර මේකෙදි කලේ අර Analysis කරලා Design කල දේවල් ටික Functional Methods ටිකක් විධිහට ගහගන්න එක. දැන් එහෙම නෙමේ.
දැන් අපි කරන්නේ එකට එකක් සම්බන්ද වෙන Function එකම තැනකින් දෙන එක. මේ ක්රමේදී තියන වාසිය තමා වෙන වෙන දේවල් වලට වෙන වෙනම functions අවශ්ය නොවීම. හැම දේට එකම තැනකින් කරගන්න පුළුවන් කම.
මේක තේරෙන්නේ නැනේ මෙහෙම කියන්නම්. අපේ මුලින් කතා කල දේවල් හැම එකේම ඒ කියන්නේ
1. Customer
2. Orders
3. Products
4. Company
ඕනේ වෙන දෙයක් තමා
1. රෙකොර්ඩ් එකක් සේව් කරගන්න
2. රෙකොර්ඩ් ඔක්කොම ගන්න.
3. අප්ඩේට් කරන්න
4. ඩිලීට් කරන්න.
ඉතින් අපි මේ හැම එකටම එක තැනක් තියාගන්නවා . එකට තමා Repository එකක් කියන්නේ. මේක සම්බන්ද වෙනවා Software design Patterns වල Repository Pattern එකට
දැනට ඔය රතු පාට T කියන ලබ්බ අමතක කරන්න ඕනේ උබලා.
එහෙම කරලා බැලුවොත් අර උඩින් තියන Customer, Product , Company ,Order හැම ටම මේ ටික කරගන්න ඕනේ නේද?
ඉතින් සරලව කිව්වොත් ඔය T වෙනුවට උබලා Customer දැම්මොත් ඔය Repository එක CustomerRepository එකක් වෙනවා. ඕකට Product දැම්මොත් එක Product Repository එකක් වෙනවා
.
ඕක හරියට අර 2 කට ලව් කරන කෙල්ලෙක් ඒ ඒ කොල්ලා ලගදි උට ඕනේ විදිහට වෙනස් වෙනවා වගේ තමා. එකයි තියෙන්නේ ගඩොල් ස්ච්චුව වගේ .දාන මතට මොක උනත් අචුචුවේ විදිහට ගල් එන්නේ
Unit Of Work නොහොත් එක ගෙයි කෑම
ඔන්න පුතාලා දැන් තමා වැඩේ අමාරු හරිය. දැන් හිතන්න අපිට ඕනේ දෙයක් කරගන්න පුළුවන් තෝර් ගේ මිටිය වගේ එක තියනවා. ඒ තමා Repository eka.
මට කරගන්නොනේ මෙහෙම එකක්.
මේක ඔපරේට් කරන එකා ඔර්ඩර් එකක් දානවා. අන්න එතකොට අපිට මේ වැඩ ටික එක පර කරගන්න වෙනවා.
1. Order එක සේව් කරන්න ඕනා
2. Order එකේ තියන අයිටම් ටික සේව් කරන්න ඕනේ
3. Stock එක වෙනස් කරන්න ඕනේ (අඩු)
දැන් පේනවද? අපිට මේ ටික වෙන වෙනම කරන්න පුළුවන්. එත් එකක් හරි උනේ නැත්නම් හුටා තමා. ඉතින් මේ තුනම එක යුනිට් එකක් වෙන්න ඕනේ.එකට වෙන්න ඕනේ
ඉතින් අර වෙන වෙනම තියන repository වලින් අපිට ඕනේ වැඩ ටික කරගන්න අපි යුනිට් හදාගන්නවා. මේකට තම unit of work කියන්නේ . මේකත් Software design pattern එකක් පුතිලා
Back End Service
හරි දැන් මෙහෙම හිතමු , ඔන්න මගේ ඇප් එකේ තියනවා ඔර්ඩර් එකක් දාන තැන. එතන තියනවා සේව් කියලා බට්න් එකක් . දැන් මේක ප්රෙස් කලාම අර ඔර්ඩර් එක සව වෙන්න ඕනේ. එහෙමත් නැත්නම් අර ඔර්ඩර් සේව් කරන Unit OF work එක ඇහැරවලා එකෙන් වැඩ ගන්න ඕනේ.
ඉතින් අපිට නිකන් මේ UOM එකට කතා කරන්න බැ වෙබ් එක හරහා. එකට වෙබ් සර්විස් එකක් හරහා කරන්න ඕනේ. වෙබ් සර්විස් එකක තියනවා end Point එකක් මේ ඔර්ඩර් එක සේව් කරන .එකට අර ඩේටා ටික යැව්වම එකෙන් Order Unit OF work ekata ඩේටා ටික දෙනවා. එකෙන් ඩේටා බේස් එකට සේව් කරනවා.
හරි දැන් කියෙව්වා ඇති වැඩේට බහිමු. මුලින්ම තියෙන්නේ Visual Studio Project එකක් අරගෙන එකේ layers ටික කඩා ගන්න එක. ඒ ටික මම එන්ගිරිස් වලින් කොටන්නම් හොදේ.
මුලින්ම තියෙන්නේ අපේ Class ටික හදාගන්න. මේකට සාමන්යෙන් කියන්නේ Domain එක කියලා. සමහරු කියනවා model එක කියලත්. එක වෙනම project එකක්
1. Open Visual Studio and File>> New Project
2. Fill the form as shown in picture
මේ වෙනකොට අපි solution එකක් හදලා නැනේ. මේකෙන් වෙන්නේ
1. Create a solution called “Gune”
2. Create Project name “Gune.Domain”
ඒ කියන්නේ Gune කියන සොලුෂන් එක ඇතුලේ “Gune.Domain” කියන ප්රොජෙක්ට් එක තියෙනවා. මේකෙන් Namespace හොයාගන්න ලේසි වෙනවා. අපි ප්රෝජෙච්ට් 20 ක් විතර තියන solution එකක වැඩ කරනකොට මේක හුගක් වැදගත්.
දැන් ඉතින් අපේ අර තියන Class 4 මේකට දාගන්න ඕනේ. මම නම් ඉතාමත් සරලව කරන්නේ. උබලාට ඕනේ නම් වැඩිපුර Fileds දාගෙන කරන්න.
වැදගත් දෙයක් කියන්න ඕනේ. Class වල නම් දානකොට ඒක වචනෙන් දාන්න ඕනේ. මොකද EF එකෙන් එක බහු වචන කරලා තමා ටේබල් නේම් එක හදන්නේ. සහ CamelCase වලින් නම් තියෙන්න ඕනේ. විශේෂයෙන් ස්ටර්ටර් ලා මේවා හරියට පිළිපදින්න ඕනේ. නැත්නම් ගුටි කන්න වෙන්නේ . Code Clearance , Comments , Scope Clearance කියන ඒවා නිකන් ගෙවල් සුද්ද කරලා පිරිසිදු කරලා තියාගන්නවා වගේ කරන්න ඕනේ.
මම නම් හදාගත්තේ මේ විදිහට. ඉස්සරහට යනකොට මේකේ Properties වැඩි කරන්න වෙනවා.
“Gune.Data” Project
දැන් අපේ මොඩල් එක එහෙමත් නැත්නම් වැඩ කරන ඩොමෙන් එක හදලා ඉවරයි. දැන් තියෙන්නේ EF එකෙන් SQL server එකත් එක්ක ගනුදෙනු කරන එක. අපිට ඕනේ නම් පුළුවන් උඩින් කිව්වා Domain Project එකේම මේක කරන්න . එත් හැම දේම පිළිවෙලක් වෙන නිසා තමා මේක වෙනම Project එකකට ගත්තේ.
අපි Entity Framework එක අපේ C# වලට දාගේම එක Configure කළා කියන්නේ අපේ ලග අර database එකේම කොපි එකක් තියනවා වගේ. හැබැයි ඩේටා නැතුව. එකට කියන්නේ “Schema Only” කියලා. බලමු කරන්නේ කොහොමද කියල.
මුලින්ම අලුත් ප්රොජෙක්ට් එකක් හදන්නේ ඕනේ
“Gune.Data” . මේකත් Class Library ටයිප් එකේ එකක්.
Install EF
දැන් කරන්න ඕනේ මේකට Entity Framework එක ඉන්ස්ටෝල් කරන එක. එකට අපිට තියනවා නගෙට් පැකේජ් මැනේජර් (Nugget Package Manager) . කියන එක. මේක වෙන්නේ මෙහෙමයි. ලෝකේ වටේ ඉන්න දිවලොප් කරන ය එකතු වෙලා මේ වගේ ප්රයෝජනවත් කොම්පොනන්ට් හදලා තියනවා. ඒවා හුගක එකතුවක් තමා නගෙට් පැකේජ් මැනේජර් (Nugget Package Manager) කියන්නේ. අපි කරන්නේ එක හරහා එකේ තියන Entity Framework එක දාගන්න එක.
ඕනෙම ප්රොජෙක්ට් එකක හෝ Solution eke
1. Right Click on solution or project.
2. select “Manage Nuget Packages”
දැන් ඉහත ආකාරයට අදාළ එක සිලෙක්ට් කරගෙන ඉන්ස්ටෝල් බටන් එකෙන් ඉන්ස්ටෝල් කරගන්න ඕනේ
Configure EF
හොදා දැන් කරන්න තියෙන්නේ අපේ EF එක configure කරගන්න එක. මේකෙදී
1. Add Class name “MainDBContext” to your Data Project
2. Inherite it with “DbContext” . DbContext is the most important class in the EntityFreamwork
3. Overide the base class constructor .
DbContext කියන එක ගන්න බැරි නම් ඒ කියන්නේ EF එක ඉන්ස්ටෝල් වෙලා න කියන එක.
:Base(“SysCon”) කියන එකෙන් කලේ අර ඉන්හෙරිට් කරපු DbContext ක්ලාස් එකේ තියන Constructor එක Overide කළා . එහෙම කරන කොට එකට Connection String එකේ නම දෙන්න ඕනේ. මේකෙදි එකේ නම “SysCon”.
දැන් මේ “SysCon” කියන Connection String එක ප්රොජෙක්ට් එකක Config File එකට දාන්න ඕනේ. දැනට අපි එකත් මේකෙම දාගන්නවා.මතක තියාගන්න EF එක මේ SysCon කියන එක හොයන්නේ “StartUp Project” එකේ Config ෆයිල් එකේ කියලා.
Add “SysCon” to Config
1. Open app.config file in Data Project
2. Add Connection string as Following figure
මේක නම් හුගක් දෙනෙක් දන්නවනේ. නොදන්නා ය අහන්න ඕනේ කියලා දෙන්නම්. මේකේ වෙන්න ඕනේ එකම දේ තමා
name එක “SysCon”. වෙන්න ඕනේ එක.
නිවැරදි කිරීමක්: මේකේ UserID නෙමේ User වෙන්න ඕනේ.
DBSet
දැන් මේ පුතිලා මෙහෙම හිතන්න ඕනේ.
MainDBContext එක කියන්නේ අපේ ප්රෝග්රෑම් එක ඇතුලේ DetaBase එක වගේ. එහෙනම් කෝ එකේ Tables?
අන්න එකට තමා මේ DbSet තියෙන්නේ. ඔයාලට පුළුවන් මේ MainDBContext එක ඇතුලේ ඕනේ තරම් DbSet හදාගන්න . ඒ හදන හැම එකක්ම අවසානයේ SQL Server එකේ ටේබල් එකක් වෙනවා. හදන්නේ මෙහෙමයි
Code:
public DbSet<Customer> Customer { get; set; }
මේ වගේ අර අනික් 4 ම හදාගන්න ඕනේ. මේ වගේ
හක්ක පනින වැඩේ (DB Migrations)
දැන් පුතිලා අපි MainDBContext එක හැදුවා . එකේ DbSet 4 ක් හැදුවා . ඒ කියන්නේ SQL server එකේ ඩේටා බේස් එකක් හදලා එකේ ටේබල් 4 ක් හැදුවා වගේ. වැඩේ කියන්නේ තාම SQL දන්නේ නැ අපි මෙහෙම දෙයක් කළා කියලා. එකට අපි පොරට (SQL server) එකට කියන්න ඕනේ අපි මෙහෙම වැඩක් කරලා තියෙන්නේ කියලා. එකට තමා Migrate කරනවා කියන්නේ.
කරන්න තියන වැඩේ සිම්පල්. මුලින්ම යන්න ඕනේ “Package Manager Console” එකට. එක ගන්න විධිහ පහත රුපෙන් පෙනේවි .
දැන් එකේ අපේ පලවෙනි කමාන්ඩ් එක රන් කරන්න ඕනේ එක තමා
Code:
enable-migrations
මේක මේ විදිහටම තියෙන්න ඕනේ. වැරදුනොත් එහෙම රතු පාටින් ලේ ගංගාවක් ගැලුවා වගේ එයි.
මේකෙන් වෙන්නේ අපි කියනවා දැන් අපි SQL එක්ක ගනුදෙනු කරන්න ලෑස්තියි කියලා.
මේක රන් කලාම අපිට EF එකෙන් හදලා දෙනවා Configuration ෆයිල් එකක්. එකේ Constructor එකේ තියනවා
Code:
AutomaticMigrationsEnabled = false;
කියලා . මේක True. කරන්න ඕනේ. ඒ කියන්නේ අපි කරන වෙනස් කම් automatically database එකට ගහන්න කියන එක සරලවම
අන්තිම කමාන්ඩ් එක තමා
Code:
update-database -f -script
-f කියන්නේ force කරලා වෙනස්කම් අප්ඩේට් කරන්න කියන එක.
-script කියන්නේ අපිට හැදෙන SQL script එක පෙන්නන කියන එක.
දැන් එනවා ලස්සන script එකක් ඔයාගේ ඔය C# ඇතුලේ හදපු schema එක ට අදාලව SQL script එක. –script ටැග් එක අයින් කරලා ආයි රන් කලොත් SQL Server එකේ Database එක හැදේවි
ඔන්න දැන් අපි ඩේටාබේස් එක හැදුවා C# ඇතුලේ ඉගෙන. දැන් ඔයාල අර මොඩල් එකට මොනයම් හෝ වෙනසක් කලොත්
Code:
update-database –f
වලින් ඒ වෙනසක් කම ඩේටා බේස් එකට දාගන්න පුළුවන්.
==========================================================================
Repository(රෙපොසිටෝරි)
දැන් තියන විදිහට ටයිප් කරන්න සැහෙන අමාරුයි. ඒ උනාට යමු ඉස්සරහට. අපි මුලින්ම කිව්වා විදිහට දැන් තමා ඔක්කොම එක තැනින් කරන මැජික් එක කරන්න යන්නේ.
මුලින්ම අපි හදාගන්න ඕනේ අලුතින් ප්රොජෙක්ට් එකක්
“Gune.Repository”
රෙපොසිටෝරි එකක් කියන්නේ එකතුවක් නේ. ඉතින් මේ එකතුව අපි මුලින් හරියට පෙළ ගස්වා ගන්න ඕනේ. එකට අපිට තියනවා Interfaces කියලා ජාතියක්. හැමෝම මේක දානවා. Interfaces වල තියන හොද ගතිය අපිට එතැනදී මොකුත් දෙන්න ඕනේ න. ඔහේ මෙතඩ් හදාගෙන යන්න පුළුවන්. ඉතින් මේක පාවිච්චි කරලා අපි Template එකක් හදාගන්නවා වැඩේට හරියන්න.
මේකේ මේ T කියන එක වෙනුවට අපිට ඕනේ එකක් පාස් කරන්න පුළුවන්. මම කරන්නේ ඕකට මුලින් දානවා මෙහෙම එකක්.
Code:
public class RepositoryBaseMain<T> : IRepositoryBase<T> where T : class
දැන් මේ T එක වෙනුවට යවන්න පුළුවන් Class එකක් විතරයි. මේකට අපි කියනවා
Constraints on type parameters කියලා
වැඩි විස්තර සදහා.
https://docs.microsoft.com/en-us/do...guide/generics/constraints-on-type-parameters
ඒ වගේම මේ T කතාව තේරුනේ නැත්නම් අහන්න ඕනේ.
RepositoryBaseMain
දැන් අරක පාවිච්චි කරලා අපේ ප්රදාන Repository එක හදාගන්න තමා යන්නේ. එකට කරන්න තියෙන්නේ අර හදාගත්ත Interface එක Implement කරන එක.
මේ විදිහට කලාම හරි.
Code:
public class RepositoryBaseMain<T> : IRepositoryBase<T> where T : class
මේකෙදි වෙන්නේ අර interface එකට අපි දාන Class එකම RepositoryBaseMain class එකටත් පාස් වෙනවා.
අපි Customer පාස් කලොත් Customer RepositoryBaseMain ekak හැදෙන්නේ මෙන්න මේ වෙලාවේදී. interface එකක් implement කරන කොට එකේ තියන හැම method එකක්ම implement කරන්න ඕනේ.
දැන් අපිට තියෙන්නේ කලින් හදාගත්ත MainDbContext එක පාවිච්චි කරලා මේ මෙතඩ් ටික හරියට හදාගන්න එක.
ඔන්න උඩින්ම DBContext එකෙන් instance එකක් හදාගත්තා.
ඒ වගේම DBSet එකෙනුත් එකක් හදාගත්තා.
මේ දෙකෙන් කියවෙන්නේ අර උඩින් එන T එක Customer nam
DBSet<T> = Customer table
මෙහෙම දැනට හිතාගන්න.
Method Implementation
දැනට මම පෙන්නනම් FindAll() මෙතොඩ් එක කොහොමද සම්පුර්ණ කරන්නේ කියලා.
හරිම ලේසි දැන් අපිට තියනවා උඩින් එන ඕනෙම Class එකකට අදාළ වෙන ටේබල් එකක්
Code:
DBSet<T>
ඉතින් මේකේ තියනවා අර ටේබල් එකේ තියන ඔක්කොම රෙකොර්ඩ්ස් . හරිම ලේසි
ID එකෙන් find කරගන්න ඕනේ නම්
මේකෙන් කලේ අර ටේබල් එකේ id එකෙන් Find එකක් ගැහුවා. ඒ කියන්නේ ලිස්ට් එකක
Find එකක් වගේ
මේක පාවිච්චි කරන විදිහ
1. ලයින් 26 න පෙන්නේ අපි අර “Gune.Data” ප්රොජෙක්ට් එකේ හදාගත්ත MainDbContext එකෙන් instance එකක් හදාගත්තා. ඒ කියන්නේ ඩේටා බේස් එක අතේ තියනවා වගේ.
2. RepositoryBaseMain කිව්වේ අර කොල්ලෝ දෙන්නෙක් ලදී දෙවිදිහකට ඉන්න කෙල්ලෙක් වගේ . එකේ T මගුල වෙනුවට මෙතැනදී අපි දුන්නේ Customer Class එක. දැන් පේනවද? ඊලග ලයින් එකෙන් තියෙන්නේ ඔක්කොම Customar la ගන්න එක. මොකද අපි ඇතුලට දෙන type එකෙන් තමා අපහු පිටට result denne
3. ඒ වගේම එකෙන්ම අපි එක රෙකොර්ඩ් එකක් ගත්තා.
4. ඔන්න දැන් කෙල්ල වෙස් මාරු කළා. දැන් දාගත්තා product කියන වෙස් මුණ. දැන් ඉතින් එලියට එන හැම එකම සහ ඇතුලට යන හැම එකම product එකක් හෝ ගොඩක්
මේ මුල අත රිදෙනවා බන් දැන්. ඕනේ කම තිබ්බට සිංහලෙන් කොටන රගේ අද තමා දැනුනේ. මේකේ අනන්තවත් ප්රශ්න ඇති ඒවා අහන්න ඕනේ.
මේකේ පාඩම් අංක දෙක.
Data Access With Dapper and Web-API Services
Project Source Code eka passe dannam
ජය
Last edited: