αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž” αž“αž·αž„αž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™

αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž” αž“αž·αž„αž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™

αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž” αž“αž·αž„αž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™

αž‚αŸ†αžšαžΌαž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αžΆαž“αž“αž·αž“αŸ’αž“αžΆαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž€αŸ†αž‘αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸ αž αžΎαž™αž“αŸ…αž…αŸ†αžŽαž»αž…αžαŸ’αž›αŸ‡αžœαžΆαž›αŸ‚αž„αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž‘αŸ…αž“αžΉαž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αŸ€αžαž αžΎαž™αŸ” αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹ αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αž»αž” αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ ORM αž“αžΉαž„αž”αž„αŸ’αž€αžΎαžαž€αŸ†αžŽαŸ‚αžαŸ’αž˜αžΈαžŠαŸ‚αž›αž“αžΉαž„αž•αŸ’αž‚αžΌαž•αŸ’αž‚αž„αž‚αŸ†αžšαžΌ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αžΈαžαž·αžœαž·αž’αžΈαž“αŸαŸ‡αž“αžΉαž„αž“αžΆαŸ†αž‘αŸ…αžŠαž›αŸ‹αž€αžΆαžšαž”αžΆαžαŸ‹αž”αž„αŸ‹αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž˜αž»αžαž„αžΆαžšαž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αž‚αžΊαžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž“αžΆαžαžΆ αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸ αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‚αŸ†αžšαžΌαž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ„αž™αž˜αž·αž“αž”αžΆαžαŸ‹αž”αž„αŸ‹αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡ αž™αžΎαž„αž…αž„αŸ‹αž˜αžΎαž›αž§αž”αž€αžšαžŽαŸαž•αŸ’αžŸαŸαž„αŸ—αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αž™αžΎαž„αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆαž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž‘αžΎαž„αžœαž·αž‰αž“αŸαŸ‡αž“αžΉαž„αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžŠαŸ‚αž›αž”αŸ’αžšαžˆαž˜αž˜αž»αžαž“αžΉαž„αž‡αž˜αŸ’αžšαžΎαžŸαžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαŸ”

αž‚αŸ„αž›αž”αŸ†αžŽαž„

αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“αžšαž”αžŸαŸ‹αž™αžΎαž„αž€αŸ†αž–αž»αž„αž’αž—αž·αžœαžŒαŸ’αžαž™αŸ‰αžΆαž„αžŸαž€αž˜αŸ’αž˜αž“αžΌαžœαž•αž›αž·αžαž•αž›αž‡αŸ†αž“αžΆαž“αŸ‹αž€αŸ’αžšαŸ„αž™ – Docs Security Suite (DSS)αŸ” αž•αŸ’αž“αŸ‚αž€αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž€αŸ’αž“αž»αž„ .Net Core αž αžΎαž™ Entity Framework Core αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž‡αžΆ DBMS αŸ” αž“αŸ…αž–αŸαž›αžšαž…αž“αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž™αžΎαž„αž”αŸ’αžšαžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž Code First αŸ”

αž‚αŸ†αžšαžΌαžŠαŸ‚αž“αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‡αžΆαž…αŸ’αžšαžΎαž“αž€αŸ’αž“αž»αž„αž–αŸαž›αžαŸ‚αž˜αž½αž™ - αž˜αŸ’αž“αžΆαž€αŸ‹αŸ—αž‘αž‘αž½αž›αžαž»αžŸαžαŸ’αžšαžΌαžœαž…αŸ†αž–αŸ„αŸ‡αž•αŸ’αž“αŸ‚αž€αž‘αžΌαž‡αžΈαžαž›αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’αŸ”

αž‡αŸ†αž“αžΆαž“αŸ‹αž˜αž»αž“αžšαž”αžŸαŸ‹ DSS αž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Entity Framework Migrations (EF 6) αž”αž»αžšαžΆαžŽαž‡αžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž–αžΆαž€αŸ’αž™αž”αžŽαŸ’αžαžΉαž„αž˜αž½αž™αž…αŸ†αž“αž½αž“αž”αžΆαž“αž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αž”αŸ’αžšαž†αžΆαŸ†αž„αž“αžΉαž„αžœαžΆ αžŠαŸ‚αž›αž‡αžΆαž”αž‰αŸ’αž αžΆαž…αž˜αŸ’αž”αž„αžŠαŸ‚αž› EF αžαŸ’αžœαŸ‡αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžŠαŸαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‡αž˜αŸ’αž›αŸ„αŸ‡αž€αŸ†αžŽαŸ‚αŸ” αž€αžΆαžšαž–αž·αžαž“αŸαŸ‡αž“αŸ…αžαŸ‚αž’αŸ’αžœαžΎαž±αŸ’αž™αž™αžΎαž„αžαž€αž…αž·αžαŸ’αžαž“αŸ…αž–αŸαž›αž‡αž½αžŸαž‡αž»αž›αž€αŸ†αž αž»αžŸαžŠαŸ‚αž›αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž˜αž½αž™αž“αŸƒαž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžš αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž–αž·αž…αžΆαžšαžŽαžΆαž‡αž˜αŸ’αžšαžΎαžŸαž‡αŸ†αž“αž½αžŸαŸ”

αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αžΆαžšαž–αž·αž—αžΆαž€αŸ’αžŸαžΆ αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αŸ–

  1. αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ DBMSs αž•αŸ’αžŸαŸαž„αŸ—αŸ” MS SQL Server, PostgreSQL, Oracle αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΆαž˜αž‘αžΆαžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž’αžΆαž…αž‘αŸ…αžšαž½αž…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαžΎαž’αŸ’αž“αž€αžŠαž‘αŸƒ
  2. αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ ORM αŸ” αžŠαŸ†αž”αžΌαž„αž‘αžΎαž™ αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž‚αŸ’αžšαŸ„αž„αž“αžΉαž„αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ EF Core αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžšαž…αž“αžΆ αž™αžΎαž„αž”αžΆαž“αžαŸ’αžšαŸ€αž˜αžαŸ’αž›αž½αž“αžšαž½αž…αž‡αžΆαžŸαŸ’αžšαŸαž…αžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž…αžΆαžšαžŽαžΆ ORMs αž•αŸ’αžŸαŸαž„αž‘αŸ€αž
  3. αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αŸ” αžŠαŸ„αž™αž‚αž·αžαž‚αžΌαžšαž–αžΈαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž“αŸƒαž€αžΌαžŠαžŠαŸ†αž”αžΌαž„ αžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αž‡αŸ€αžŸαžœαžΆαž„αž€αžΆαžšαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€ "αžŸαžšαžŸαŸαžšαžŠαŸ„αž™αžŠαŸƒ"
  4. αž€αŸ†αžŽαŸ‚αž•αŸ’αž‘αž»αž™αž‚αŸ’αž“αžΆαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž™αžΆαž€αžΆαžŸαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αž…αžΆαž™ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆ EF Core αž’αžΆαž…αž‘αž‘αž½αž›αžšαž„αž–αžΈαž‡αž˜αŸ’αž›αŸ„αŸ‡αŸ” αžœαžΆαž€αŸ’αž›αžΆαž™αž‡αžΆαž”αž‰αŸ’αž αžΆαžŸαŸ†αžαžΆαž“αŸ‹ αž–αŸ’αžšαŸ„αŸ‡αž•αŸ’αž“αŸ‚αž€αž•αŸ’αžŸαŸαž„αŸ—αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž…αŸ†αžŽαžΆαž™αž–αŸαž›αž…αŸ’αžšαžΎαž“αž›αžΎαž•αŸ’αž“αŸ‚αž€αž“αžΈαž˜αž½αž™αŸ—αŸ”
  5. αž―αž€αžŸαžΆαžš αž“αž·αž„αž‡αŸ†αž“αž½αž™αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αŸ” αž“αŸ…αž‘αžΈαž“αŸαŸ‡ αžœαžΆαž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαž–αž½αž€αž™αžΎαž„ αž˜αž·αž“αžαŸ’αžšαžΌαžœαž€αžΆαžšαž€αžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αž‘αŸαŸ”
  6. αž₯αžαž‚αž·αžαžαŸ’αž›αŸƒαŸ” αž›αž€αŸ’αžαžŽαŸˆαžœαž·αž“αž·αž…αŸ’αž†αŸαž™αž‚αžΊαž˜αžΆαž“αž›αž€αŸ’αžαžαžŽαŸ’αžŒ αžŠαŸ„αž™αž αŸαžαž»αžαžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž˜αž·αž“αžαŸ’αž›αŸƒαžαŸ’αž›αžΆαŸ†αž„ αž¬αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžαŸ’αž›αŸƒαž“αŸ„αŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸαžŠαŸαž›αŸ’αž’αž€αŸ’αž“αž»αž„αž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž› αž™αžΎαž„αž€αŸαž”αžΆαž“αžαŸ’αžšαŸ€αž˜αžαŸ’αž›αž½αž“αžšαž½αž…αž‡αžΆαžŸαŸ’αžšαŸαž…αžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž…αžΆαžšαžŽαžΆαž•αž„αžŠαŸ‚αžšαŸ”

αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αžΆαžšαžŸαŸ’αžšαžΆαžœαž‡αŸ’αžšαžΆαžœαžαž·αž…αžαž½αž… αž‡αž˜αŸ’αžšαžΎαžŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαžšαž€αžƒαžΎαž‰ αž αžΎαž™αž”αžΆαž“αžšαž€αžƒαžΎαž‰αžαžΆαž‚αž½αžšαž±αŸ’αž™αž…αž„αŸ‹αž–αž·αž…αžΆαžšαžŽαžΆαŸ–

  1. αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŸαŸ’αž“αžΌαž› EF
  2. DBup
  3. αž•αŸ’αž‘αŸ‡αž˜αžΌαž› ធ៊ី
  4. ThinkingHome.αž’αŸ’αž“αž€αž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€
  5. αž’αŸ’αž“αž€αž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αž™αŸ‰αžΆαž„αžŸαŸ’αž‘αžΆαžαŸ‹αž‡αŸ†αž“αžΆαž‰

αž αžΎαž™αž₯αž‘αžΌαžœαž“αŸαŸ‡αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαž”αž“αŸ’αžαž·αž…

αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž” αž“αž·αž„αž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™
αž€αžΆαžšαž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αžŸαŸ’αž“αžΌαž›αžšαž”αžŸαŸ‹ EntityFramework

αžαžΆαž˜αž’αž˜αŸ’αž˜αž‡αžΆαžαž· αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸαžŠαŸ†αž”αžΌαž„ αž“αž·αž„αžŸαŸ†αžαžΆαž“αŸ‹αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαŸ” αž§αž”αž€αžšαžŽαŸβ€‹αžŠαžΎαž˜β€‹αžŠαŸ‚αž›β€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšβ€‹αž…αŸαž‰β€‹αž–αžΈβ€‹αž”αŸ’αžšαž’αž”αŸ‹β€‹αžŠαŸ„αž™β€‹αž˜αž·αž“β€‹αž˜αžΆαž“β€‹αž€αžΆαžšβ€‹αž…αŸ’αžšαž”αžΌαž€αž…αŸ’αžšαž”αž›αŸ‹β€‹αž‡αžΆαž˜αž½αž™β€‹αž“αžΉαž„β€‹αž’αŸ†αž–αž·αž›αŸ” αž…αŸ†αž“αž½αž“αž’αŸ†αž“αŸƒαž―αž€αžŸαžΆαžš, αž•αŸ’αž›αžΌαžœαž€αžΆαžšαž“αž·αž„αž˜αž·αž“αžŠαžΌαž…αŸ’αž“αŸαŸ‡, αž—αžΆαž–αžŸαžΆαž˜αž‰αŸ’αž‰, αž›αŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž€αžΆαžšαžαŸ’αž’αžΌαž‰αžαŸ’αž’αŸ‚αžšαž’αŸ†αž–αžΈ EF αž”αž»αžšαžΆαžŽαž€αŸαž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž•αž„αžŠαŸ‚αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ EF Core αŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž‚αž»αžŽαžŸαž˜αŸ’αž”αžαŸ’αžαž·αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ EF Core αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΌαžŸαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αŸ–

  • αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžšαž”αžŸαŸ‹ Microsoft αž―αž€αžŸαžΆαžš αžšαž½αž˜αž‘αžΆαŸ†αž„αž‡αžΆαž—αžΆαžŸαžΆαžšαž»αžŸαŸ’αžŸαžΈ αžŸαž αž‚αž˜αž“αŸαžŠαŸαž’αŸ†
  • αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎ CodeFirst
  • αž”αžΎαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž‘αŸ…αž“αžΉαž„ EF 6 EF Core αž›αŸ‚αž„αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžšαžΌαž”αžαžαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αŸ€αžαž αžΎαž™αŸ” αž“αŸ…αž–αŸαž›αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ EF Core αž“αŸ…αž€αŸ’αž“αž»αž„ Code First αžœαžΆαž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αŸ€αžαž‘αŸ
  • αžŠαŸ„αž™αžŸαžΆαžšαž™αžΎαž„αž€αŸ†αž–αž»αž„αžšαžΆαŸ†αž–αžΈ Code First αžœαžΆαž’αžΆαž…αž’αŸ’αžœαžΎαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž˜αž½αž™αž‘αŸ…αž€αžΆαž“αŸ‹αž’αŸ’αž“αž€αž•αŸ’αžαž›αŸ‹αžŸαŸαžœαžΆαž…αžΌαž›αž”αŸ’αžšαžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”
  • αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž’αŸ’αž“αž€αž•αŸ’αžαž›αŸ‹αžŸαŸαžœαžΆ PostgreSQL αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΆαŸ†αž‘αŸ’αžš Oracle αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΆαŸ†αž‘αŸ’αžšαŸ”αž›αŸ” αž“αž·αž„αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚ MS SQL Server 

αž“αž·αž„αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·αž•αž„αžŠαŸ‚αžš:

  • αž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‡αž˜αŸ’αž›αŸ„αŸ‡αž“αŸ…αžαŸ‚αžŸαŸ’αžαž·αžαž€αŸ’αž“αž»αž„αž€αž˜αŸ’αžšαž·αžαžŠαžŠαŸ‚αž›αŸ” αžœαžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™ αž“αž·αž„αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αžšαžΌαž”αžαžαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™
  • αž€αžΆαžšαž–αžΉαž„αž•αŸ’αž’αŸ‚αž€αž›αžΎαž‚αŸ†αžšαžΌαžŠαŸ‚αž›αž€αžΆαžšαž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαž

DbUp

αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž” αž“αž·αž„αž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™
dbup.github.io

DbUp αž‚αžΊαž‡αžΆαž”αžŽαŸ’αžŽαžΆαž›αŸαž™ .NET αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αžŠαŸ„αž™ NuGet αž“αž·αž„αž‡αž½αž™αž‡αŸ†αžšαž»αž‰αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ…αž€αžΆαž“αŸ‹ SQL Server αŸ” αžœαžΆαžšαž€αŸ’αžŸαžΆαžŠαžΆαž“αž“αŸƒαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αžšαž½αž…αž αžΎαž™ αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ‚αž›αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž“αŸαŸ‡αž”αžΆαž“αžšαžΈαž€αž…αž˜αŸ’αžšαžΎαž“αž…αŸαž‰αž–αžΈαž‚αž˜αŸ’αžšαŸ„αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžŸαžšαžŸαŸαžšαž”αŸ’αž›αž»αž€αž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž αž“αŸ…αž›αžΎ ASP.NET αž αžΎαž™αž˜αžΆαž“αž“αŸ…αž€αŸ’αžšαŸ„αž˜αž’αžΆαž‡αŸ’αž‰αžΆαž”αŸαžŽαŸ’αžŽ MIT αž αžΎαž™αž€αžΌαžŠαž‚αžΊαž“αŸ…αž›αžΎ GitHub αŸ” αž€αžΆαžšαž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎ T-SQL αŸ”

αžαžΎαž˜αžΆαž“αž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž’αŸ’αžœαžΈαžαŸ’αž›αŸ‡αŸ–

  • αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ DBMS αž˜αž½αž™αž…αŸ†αž“αž½αž“αž’αŸ† (MS SQL Server, PstgreSQL, MySQL)
  • αžŠαŸ„αž™αžŸαžΆαžšαžŸαŸ’αž‚αŸ’αžšαžΈαž”αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž€αŸ’αž“αž»αž„ T-SQL αžœαžΆαž˜αžΎαž›αž‘αŸ…αžŸαžΆαž˜αž‰αŸ’αž‰αžŽαžΆαžŸαŸ‹αŸ”
  • αž‡αž˜αŸ’αž›αŸ„αŸ‡αž€αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαŸ„αž™αž”αŸ’αžšαžΎ SQL αž•αž„αžŠαŸ‚αžšαŸ”

αž“αž·αž„αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·:

  • αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαž“αŸƒ DBMSs αžŠαŸ‚αž›αž‚αžΆαŸ†αž‘αŸ’αžš Oracle αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž˜αž½αž™αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž–αž½αž€αž‚αŸαž‘αŸαŸ”
  • αž˜αž·αž“αž˜αžΆαž“αž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αž‡αžΆαž˜αž½αž™ ORM αž‘αŸαŸ”
  • αž€αžΆαžšαžŸαžšαžŸαŸαžšαžŸαŸ’αž‚αŸ’αžšαžΈαž” T-SQL αžŠαŸ„αž™αžŠαŸƒαž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž™αžΎαž„αž…αž„αŸ‹αž”αžΆαž“αž“αŸ„αŸ‡αž‘αŸαŸ”
  • αž―αž€αžŸαžΆαžš αž“αž·αž„αžŸαž αž‚αž˜αž“αŸαž‚αžΊαžŠαžΌαž…αŸ’αž“αŸαŸ‡αž˜αŸ‚αž“ αž‘αŸ„αŸ‡αž”αžΈαž€αŸ’αž“αž»αž„αž“αŸαž™αž“αŸƒαž€αžΆαžšαžŸαžšαžŸαŸαžšαžŸαŸ’αž‚αŸ’αžšαžΈαž” SQL αž–αž½αž€αž‚αŸαž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž€αŸαžŠαŸ„αž™αŸ”

αž•αŸ’αž‘αŸ‡αž˜αžΌαž› ធ៊ី

αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž” αž“αž·αž„αž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™
github.com/chucknorris/roundhouse

αž§αž”αž€αžšαžŽαŸαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αž“αŸαŸ‡ αž…αŸ‚αž€αž…αžΆαž™αž€αŸ’αžšαŸ„αž˜αž’αžΆαž‡αŸ’αž‰αžΆαž”αŸαžŽαŸ’αžŽ Apache 2.0 αžŠαžΌαž…αž§αž”αž€αžšαžŽαŸαž˜αž»αž“αžŠαŸ‚αžš αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€ T-SQL αŸ” αž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„ αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž’αžΆαž‘αž·αž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸαž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžš DBMS αž‡αžΆαž‡αžΆαž„αž”αž„αŸ’αž€αžΎαžαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž”αŸ’αžšαž€αž”αžŠαŸ„αž™αž•αžΆαžŸαž»αž€αž—αžΆαž–αŸ”

αž”αŸ’αžšαž»αžŸ:

  • αž‚αžΆαŸ†αž‘αŸ’αžš DBMS αž…αžΆαŸ†αž”αžΆαž…αŸ‹ (αžšαž½αž˜αž‘αžΆαŸ†αž„ Oracle)

αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·:

  • Oracle (αž€αŸαžŠαžΌαž…αž‡αžΆ Access αžŠαŸ‚αž›αž˜αž·αž“αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αž½αž€αž™αžΎαž„) αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΆαŸ†αž‘αŸ’αžšαž“αŸ…αž›αžΎ .NET Core αž‘αŸ αž˜αžΆαž“αžαŸ‚αž“αŸ…αž›αžΎ .NET Full Framework αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”
  • αž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž˜αž½αž™ ORM αž‘αŸαŸ”
  • αž˜αžΆαž“αž―αž€αžŸαžΆαžšαžαž·αž…αž‡αžΆαž„αž§αž”αž€αžšαžŽαŸαž–αžΈαž˜αž»αž“
  • αž‡αžΆαžαŸ’αž˜αžΈαž˜αŸ’αžαž„αž‘αŸ€αž - αž€αžΆαžšαž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαžŠαŸ„αž™αžŸαŸ’αž‚αŸ’αžšαžΈαž”

ThinkingHome.αž’αŸ’αž“αž€αž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€

αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž” αž“αž·αž„αž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™

αž§αž”αž€αžšαžŽαŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž˜αžΆαž“αž€αŸ†αžŽαŸ‚αž‘αŸ…αžœαŸαž‘αž·αž€αžΆ .NET Core αžŠαŸ‚αž›αž…αŸ‚αž€αž…αžΆαž™αž€αŸ’αžšαŸ„αž˜αž’αžΆαž‡αŸ’αž‰αžΆαž”αŸαžŽαŸ’αžŽ MIT αŸ” αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžαŸ’αž›αž½αž“αž―αž„αž”αžΆαž“αžŸαžšαžŸαŸαžšαž’αŸ†αž–αžΈαž€αŸ†αžŽαŸ‚αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αžαžšαž”αžŸαŸ‹αžαŸ’αž›αž½αž“αž€αžΆαž›αž–αžΈαž‡αž·αžαž˜αž½αž™αž†αŸ’αž“αžΆαŸ†αž˜αž»αž“.

αž”αŸ’αžšαž»αžŸ:

  • αžšαž…αž“αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ .NET Core
  • αž’αž“αž»αžœαžαŸ’αžβ€‹αž€αžΆαžšβ€‹αž’αŸ’αžœαžΎβ€‹αž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€β€‹αžαžΆαž˜β€‹αž›αŸ†αžŠαžΆαž”αŸ‹β€‹αž›αŸ†αžŠαŸ„αž™
  • αž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž€αžαŸ‹αžαŸ’αžšαžΆαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€

αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·:

  • αž”αžΆαž“αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž€αžΆαž›αž–αžΈαž˜αž½αž™αž†αŸ’αž“αžΆαŸ†αž˜αž»αž“αŸ” αž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„ αž‚αž˜αŸ’αžšαŸ„αž„αž“αŸαŸ‡αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΆαŸ†αž‘αŸ’αžšαž‘αŸαŸ”
  • αž˜αž·αž“β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž‚αžΆαŸ†αž‘αŸ’αžšβ€‹αžŠαŸ„αž™ Oracle (αž’αžαŸ’αžαž”αž‘β€‹αž”αž‰αŸ’αž‡αžΆαž€αŸ‹β€‹αžαžΆβ€‹αž“αŸαŸ‡β€‹αž˜αž€β€‹αž–αžΈβ€‹αž€αžΆαžšβ€‹αžαŸ’αžœαŸ‡β€‹αž€αžΆαžšβ€‹αž’αž“αž»αžœαžαŸ’αžβ€‹αžŸαŸ’αžαž·αžšαž—αžΆαž–β€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ .NET Core - αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž“αŸαŸ‡β€‹αž‚αžΊβ€‹αž‡αžΆβ€‹αž˜αž½αž™β€‹αž†αŸ’αž“αžΆαŸ†β€‹αž˜αž»αž“β€‹)
  • αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž‘αŸαŸ”

αžŸαžšαž»αž”αž˜αž€ αž‚αž˜αŸ’αžšαŸ„αž„αž“αŸαŸ‡αž˜αžΎαž›αž‘αŸ…αž˜αžΆαž“αž‡αŸ„αž‚αž‡αŸαž™ αž‡αžΆαž–αž·αžŸαŸαžŸαž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαžαŸ’αžšαžΌαžœαž’αž—αž·αžœαžŒαŸ’αž αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž€αžΆαžšαžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž“αŸ…αž‘αžΈαž“αŸαŸ‡ αž“αž·αž„αž₯αž‘αžΌαžœαž“αŸαŸ‡αŸ”

αž’αŸ’αž“αž€αž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αž™αŸ‰αžΆαž„αžŸαŸ’αž‘αžΆαžαŸ‹αž‡αŸ†αž“αžΆαž‰

αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž” αž“αž·αž„αž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™
github.com/fluentmigrator/fluentmigrator

αž§αž”αž€αžšαžŽαŸαž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αžŠαŸαž–αŸαž‰αž“αž·αž™αž˜αž”αŸ†αž•αž»αžαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αŸ’αžšαž»αž˜αž’αŸ’αž“αž€αž‚αžΆαŸ†αž‘αŸ’αžšαžŠαŸαž’αŸ†αŸ” αž…αŸ‚αž€αž…αžΆαž™αž€αŸ’αžšαŸ„αž˜αž’αžΆαž‡αŸ’αž‰αžΆαž”αŸαžŽαŸ’αžŽ Apache 2.0 αŸ” αžŠαžΌαž…αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆ αžœαžΆαž‚αžΊαž‡αžΆαž€αŸ’αžšαž”αžαŸαžŽαŸ’αžŒαž€αžΆαžšαž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ .NET αžŠαŸ‚αž›αžŸαŸ’αžšαžŠαŸ€αž„αž‘αŸ…αž“αžΉαž„ Ruby on Rails MigrationsαŸ” αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ…αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ’αž“αžΆαž€αŸ‹ C# αŸ”

αž˜αžΆαž“αž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž“αŸ…αž‘αžΈαž“αŸαŸ‡αŸ–

  • αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ DBMS αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžš
  • αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαŸ’αž“αžΌαž› .NET
  • αžŸαž αž‚αž˜αž“αŸαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž’αŸ†
  • αž‡αž˜αŸ’αž›αŸ„αŸ‡αžšαžœαžΆαž„αž€αžΆαžšαž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™ - αž›αŸ†αžŠαžΆαž”αŸ‹αž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž‡αž˜αŸ’αž›αŸ„αŸ‡αž€αžΎαžαž‘αžΎαž„αž‡αž»αŸ†αžœαž·αž‰αž’αž„αŸ’αž‚αž—αžΆαž–αž˜αž½αž™ αž“αŸ…αž–αŸαž›αž”αž‰αŸ’αž…αžΌαž›αž€αžΌαžŠ αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžαžΆαž˜αžšαž”αŸ€αž”αžŠαžΌαž…αž‚αŸ’αž“αžΆαž‘αŸ…αž“αžΉαž„αž€αžΌαžŠαžŠαŸ‚αž›αž“αŸ…αžŸαž›αŸ‹αŸ”
  • αž˜αžΆαž“αž‘αž˜αŸ’αžšαž„αŸ‹αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αžŠαŸ„αž™αž‡αŸ„αž‚αž‡αŸαž™αŸ” αž αžΎαž™αž–αž½αž€αž‚αŸαž’αžΆαž…αž’αž“αž»αžœαžαŸ’αžαž˜αž»αžαž„αžΆαžšαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž”αžΆαž“αŸ” αž€αžΆαžšαž’αžΆαž”αŸ‹αžŠαŸαžαž…αž»αž„αž€αŸ’αžšαŸ„αž™αž‚αžΊαž˜αž½αž™αžαŸ‚αž˜αž»αž“ αž–αŸ„αž›αž‚αžΊαž‚αž˜αŸ’αžšαŸ„αž„αž“αŸαŸ‡αž“αŸ…αžšαžŸαŸ‹

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ minuses αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‚αžΊαŸ–

  • αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž‘αŸαŸ”
  • αž˜αž·αž“αž˜αžΆαž“αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αž‡αžΆαž˜αž½αž™αž˜αŸ‰αžΌαžŠαŸ‚αž› EF αž‘αŸαŸ”
  • αž˜αž·αž“αž˜αžΆαž“αžšαžΌαž”αžαžαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αŸαŸ”

αžαžΎαž’αŸ’αžœαžΈαž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸαžšαž”αžŸαŸ‹αž™αžΎαž„?

αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž” αž“αž·αž„αž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™

αž€αžΆαžšαž‡αž‡αŸ‚αž€αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαž‚αŸ’αž“αžΆαž™αŸ‰αžΆαž„αž€αŸ’αžαŸ…αž‚αž‚αž»αž€αž”αžΆαž“αžœαž·αž›αž‡αž»αŸ†αžœαž·αž‰αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž–αžΈαžš - αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· αž“αž·αž„αž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‡αž˜αŸ’αž›αŸ„αŸ‡αž”αŸ’αžšαž€αž”αžŠαŸ„αž™αž—αžΆαž–αž†αŸ’αž›αžΆαžαžœαŸƒαŸ” αž€αžαŸ’αžαžΆαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‚αžΊαž‚αž½αžšαž±αŸ’αž™αž—αŸαž™αžαŸ’αž›αžΆαž…αžαž·αž…αž‡αžΆαž„αŸ” αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αžΆαžšαž–αž·αž—αžΆαž€αŸ’αžŸαžΆ αž€αŸ’αžšαž»αž˜αž€αžΆαžšαž„αžΆαžšαž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Fluent Migrator αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„αžαŸ’αž˜αžΈαž“αŸαŸ‡αŸ” αž–αŸ’αžšαŸ„αŸ‡β€‹αž€αžΆαžšβ€‹αžŠαŸ„αŸ‡β€‹αžŸαŸ’αžšαžΆαž™β€‹αž‡αž˜αŸ’αž›αŸ„αŸ‡β€‹αž“αŸ…β€‹αž–αŸαž›β€‹αž’αž“αžΆαž‚αžβ€‹αž“αžΉαž„β€‹αž“αžΆαŸ†β€‹αž˜αž€β€‹αž“αžΌαžœβ€‹αž•αž›β€‹αž”αŸ’αžšαž™αŸ„αž‡αž“αŸβ€‹αž…αŸ’αžšαžΎαž“β€‹αž‡αžΆαž„αŸ”

αž€αžΆαžšαžšαž€αžƒαžΎαž‰

αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹αž˜αž·αž“αž˜αžΆαž“αž§αž”αž€αžšαžŽαŸαž›αŸ’αž’αž₯αžαžαŸ’αž…αŸ„αŸ‡αž‘αŸαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αŸ†αžŽαžαŸ‹αž’αžΆαž‘αž·αž—αžΆαž– "αž€αžΆαžšαž…αž„αŸ‹αž”αžΆαž“" αžšαž”αžŸαŸ‹αž™αžΎαž„αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αŸ’αžšαž»αž˜αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž“αž·αž„αž€αž·αž…αŸ’αž…αž€αžΆαžšαž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž€αžαŸ’αžαžΆαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž’αžΆαž…αž‡αžΆαž€αžΆαžšαžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαŸ” αž™αžΎαž„αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆαž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž“αžΉαž„αž‡αž½αž™αž’αŸ’αž“αž€αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹