ObjectRepository - .NET แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒชแƒแƒ•แƒ˜แƒก แƒœแƒ˜แƒ›แƒฃแƒจแƒ˜ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒกแƒแƒฎแƒšแƒ˜แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก

แƒ แƒแƒขแƒแƒ› แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ˜ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒจแƒ˜?

แƒ•แƒ”แƒ‘แƒกแƒแƒ˜แƒขแƒ˜แƒก แƒแƒœ แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒœแƒแƒฎแƒแƒ“, แƒ’แƒแƒœแƒ˜แƒ”แƒ แƒ˜ แƒแƒ“แƒแƒ›แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒฃแƒ›แƒ”แƒขแƒ”แƒกแƒแƒ‘แƒ˜แƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒกแƒฃแƒ แƒ•แƒ˜แƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ SQL แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒแƒ แƒฉแƒ”แƒ•แƒ. 

แƒ›แƒแƒ’แƒ แƒแƒ› แƒ–แƒแƒ’แƒฏแƒ”แƒ  แƒ˜แƒ‘แƒแƒ“แƒ”แƒ‘แƒ แƒแƒ–แƒ แƒ˜, แƒ แƒแƒ› แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ›แƒแƒ“แƒ”แƒšแƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒคแƒ”แƒ แƒ˜แƒกแƒ˜ SQL-แƒกแƒ—แƒ•แƒ˜แƒก: แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒกแƒแƒซแƒ˜แƒ”แƒ‘แƒ แƒแƒœ แƒกแƒแƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒ’แƒ แƒแƒคแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒกแƒแƒก, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ›แƒแƒซแƒ”แƒ‘แƒœแƒแƒ— แƒ แƒ—แƒฃแƒšแƒ˜ แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒแƒ‘แƒ”แƒ‘แƒ˜ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก. 

แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒชแƒฃแƒ“แƒ˜ แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒแƒ, แƒ แƒแƒชแƒ แƒ’แƒฃแƒœแƒ“แƒจแƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘ แƒ“แƒ แƒ™แƒแƒšแƒ”แƒ’แƒแƒ› แƒแƒ  แƒ˜แƒชแƒ˜แƒก แƒ แƒแƒ’แƒแƒ  แƒจแƒ”แƒฅแƒ›แƒœแƒแƒก แƒกแƒฌแƒ แƒแƒคแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜. แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜ แƒ“แƒ แƒ แƒ“แƒแƒฎแƒแƒ แƒฏแƒ”แƒ— N+1 แƒแƒ›แƒแƒชแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒญแƒ แƒแƒกแƒ แƒ“แƒ แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ–แƒ”, แƒ แƒแƒ—แƒ แƒ›แƒ—แƒแƒ•แƒแƒ  แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ” SELECT แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒก แƒ’แƒแƒœแƒ˜แƒ•แƒ แƒฃแƒš แƒ“แƒ แƒแƒจแƒ˜?

แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒžแƒแƒžแƒฃแƒšแƒแƒ แƒฃแƒšแƒ˜ แƒ›แƒ˜แƒ“แƒ’แƒแƒ›แƒ แƒแƒ แƒ˜แƒก NoSQL. แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒฌแƒšแƒ˜แƒก แƒฌแƒ˜แƒœ แƒ˜แƒงแƒ แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒแƒŸแƒ˜แƒแƒขแƒแƒŸแƒ˜ แƒแƒ› แƒ—แƒ”แƒ›แƒ˜แƒก แƒ˜แƒ แƒ’แƒ•แƒšแƒ˜แƒ• - แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ›แƒแƒ— แƒ’แƒแƒœแƒแƒ—แƒแƒ•แƒกแƒ”แƒก MongoDB แƒ“แƒ แƒ™แƒ›แƒแƒงแƒแƒคแƒ˜แƒšแƒ˜ แƒ˜แƒงแƒ•แƒœแƒ”แƒœ แƒžแƒแƒกแƒฃแƒฎแƒ”แƒ‘แƒ˜แƒ— json แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ˜แƒ— (แƒกแƒฎแƒ•แƒแƒ—แƒ แƒจแƒแƒ แƒ˜แƒก, แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜ แƒฎแƒ”แƒšแƒฏแƒแƒฎแƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒกแƒ›แƒ แƒ›แƒแƒ’แƒ˜แƒฌแƒ˜แƒแƒ— แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒจแƒ˜ แƒฌแƒ แƒ˜แƒฃแƒšแƒ˜ แƒ‘แƒ›แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒ?).

แƒ›แƒ” แƒ’แƒ—แƒแƒ•แƒแƒ–แƒแƒ‘แƒ— แƒกแƒชแƒแƒ“แƒแƒ— แƒกแƒฎแƒ•แƒ, แƒแƒšแƒขแƒ”แƒ แƒœแƒแƒขแƒ˜แƒฃแƒšแƒ˜ แƒ›แƒ”แƒ—แƒแƒ“แƒ˜ - แƒ แƒแƒขแƒแƒ› แƒแƒ  แƒกแƒชแƒแƒ“แƒแƒ— แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ˜แƒก แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒจแƒ˜, แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒฃแƒšแƒแƒ“ แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ˜แƒ— แƒกแƒแƒชแƒแƒ•แƒจแƒ˜ (แƒคแƒแƒ˜แƒšแƒ˜, แƒ“แƒ˜แƒกแƒขแƒแƒœแƒชแƒ˜แƒฃแƒ แƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ)? 

แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ แƒ˜แƒแƒคแƒ˜ แƒ’แƒแƒฎแƒ“แƒ แƒ“แƒ แƒ›แƒชแƒ˜แƒ แƒ” แƒ“แƒ แƒกแƒแƒจแƒฃแƒแƒšแƒ แƒ–แƒแƒ›แƒ˜แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜แƒก แƒฃแƒ›แƒ”แƒขแƒ”แƒกแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒจแƒ”แƒกแƒแƒซแƒšแƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ˜ แƒฏแƒ“แƒ”แƒ‘แƒ 1 แƒ’แƒ‘ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒจแƒ˜. (แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒฉแƒ”แƒ›แƒ˜ แƒกแƒแƒงแƒ•แƒแƒ แƒ”แƒšแƒ˜ แƒกแƒแƒฎแƒšแƒ˜แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒ แƒคแƒ˜แƒœแƒแƒœแƒกแƒฃแƒ แƒ˜ แƒขแƒ แƒ”แƒ™แƒ”แƒ แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ˜แƒœแƒแƒฎแƒแƒ•แƒก แƒงแƒแƒ•แƒ”แƒšแƒ“แƒฆแƒ˜แƒฃแƒ  แƒกแƒขแƒแƒขแƒ˜แƒกแƒขแƒ˜แƒ™แƒแƒก แƒ“แƒ แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒแƒก แƒฉแƒ”แƒ›แƒ˜ แƒฎแƒแƒ แƒฏแƒ”แƒ‘แƒ˜แƒก, แƒœแƒแƒจแƒ—แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒฌแƒ”แƒšแƒ˜แƒฌแƒแƒ“แƒœแƒแƒฎแƒ”แƒ•แƒ แƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜, แƒ›แƒแƒ˜แƒฎแƒ›แƒแƒ แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ 45 แƒ›แƒ‘ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒก.)

แƒ“แƒแƒ“แƒ”แƒ‘แƒ˜แƒ—แƒ˜:

  • แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ–แƒ” แƒฌแƒ•แƒ“แƒแƒ›แƒ แƒฃแƒคแƒ แƒ แƒแƒ“แƒ•แƒ˜แƒšแƒ˜ แƒฎแƒ“แƒ”แƒ‘แƒ - แƒ—แƒฅแƒ•แƒ”แƒœ แƒแƒ  แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— แƒคแƒ˜แƒฅแƒ แƒ˜ แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒ‘แƒ–แƒ”, แƒ–แƒแƒ แƒ›แƒแƒชแƒ˜ แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒแƒ–แƒ”, ORM แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ–แƒ”, แƒ—แƒฅแƒ•แƒ”แƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ— แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ• C# แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒ—แƒแƒœ;
  • แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ—แƒ”แƒ›แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒฌแƒ•แƒ“แƒแƒ›แƒแƒกแƒ—แƒแƒœ;
  • แƒซแƒแƒšแƒ˜แƒแƒœ แƒกแƒฌแƒ แƒแƒคแƒ˜ - แƒแƒ  แƒแƒ แƒ˜แƒก แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ, แƒแƒ  แƒแƒ แƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒก แƒ—แƒแƒ แƒ’แƒ›แƒœแƒ แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒ”แƒœแƒแƒ–แƒ”, แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜แƒก (แƒ“แƒ”)แƒกแƒ”แƒ แƒ˜แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ;
  • แƒ“แƒแƒกแƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒคแƒแƒ แƒ›แƒ˜แƒ— - แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ”แƒก XML แƒ“แƒ˜แƒกแƒ™แƒ–แƒ”, แƒ—แƒฃ SQL Server-แƒจแƒ˜, แƒ—แƒฃ Azure Table Storage-แƒจแƒ˜.

Cons:

  • แƒฐแƒแƒ แƒ˜แƒ–แƒแƒœแƒขแƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒแƒกแƒจแƒขแƒแƒ‘แƒ˜แƒ แƒ”แƒ‘แƒ แƒ“แƒแƒ™แƒแƒ แƒ’แƒฃแƒšแƒ˜แƒ แƒ“แƒ แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“, แƒœแƒฃแƒšแƒแƒ•แƒแƒœแƒ˜ แƒจแƒ”แƒคแƒ”แƒ แƒฎแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ แƒจแƒ”แƒฃแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ;
  • แƒ—แƒฃ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒแƒ•แƒแƒ แƒ˜แƒฃแƒšแƒ˜แƒ, แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒœแƒแƒฌแƒ˜แƒšแƒแƒ‘แƒ แƒ˜แƒ• แƒ“แƒแƒ™แƒแƒ แƒ’แƒแƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜. (แƒ›แƒแƒ’แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒแƒ แƒแƒกแƒ“แƒ แƒแƒก แƒ˜แƒจแƒšแƒ”แƒ‘แƒ, แƒแƒ แƒ?)

แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ˜แƒ’แƒ˜?

แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜แƒ:

  • แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒจแƒ˜ แƒ›แƒงแƒแƒ แƒ“แƒ”แƒ‘แƒ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒกแƒแƒชแƒแƒ•แƒ—แƒแƒœ แƒ“แƒ แƒ˜แƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ‘แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜;
  • แƒแƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜แƒก แƒ›แƒแƒ“แƒ”แƒšแƒ˜, แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“แƒ˜ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ แƒ”แƒšแƒแƒชแƒ˜แƒฃแƒ แƒ˜ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ”แƒ‘แƒ˜ (1:1, 1: แƒ‘แƒ”แƒ•แƒ แƒ˜);
  • แƒ’แƒแƒ›แƒแƒฌแƒ”แƒ แƒ แƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜แƒก แƒ—แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก (INotifyPropertyChanged) แƒ“แƒ แƒ™แƒ แƒ”แƒ‘แƒฃแƒšแƒจแƒ˜ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒแƒœ แƒแƒ›แƒแƒกแƒแƒฆแƒ”แƒ‘แƒแƒ“ (INotifyCollectionChanged);
  • แƒ’แƒแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒกแƒแƒก, แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒšแƒ˜ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜ แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ แƒ แƒ˜แƒ’แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒกแƒแƒชแƒแƒ•แƒจแƒ˜ แƒฉแƒแƒกแƒแƒฌแƒ”แƒ แƒแƒ“;
  • แƒกแƒแƒชแƒแƒ•แƒจแƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒฃแƒšแƒแƒ“ แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ (แƒขแƒแƒ˜แƒ›แƒ”แƒ แƒ–แƒ”) แƒคแƒแƒœแƒฃแƒ  แƒ—แƒ”แƒ›แƒแƒจแƒ˜;
  • แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒ“แƒแƒœ แƒ’แƒแƒกแƒ•แƒšแƒ˜แƒกแƒแƒก แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒแƒกแƒ”แƒ•แƒ” แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒจแƒ˜.

แƒ™แƒแƒ“แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜

แƒกแƒแƒญแƒ˜แƒ แƒ แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ

// ะžัะฝะพะฒะฝะฐั ะฑะธะฑะปะธะพั‚ะตะบะฐ
Install-Package OutCode.EscapeTeams.ObjectRepository
    
// ะฅั€ะฐะฝะธะปะธั‰ะต ะดะฐะฝะฝั‹ั…, ะฒ ะบะพั‚ะพั€ะพะผ ะฑัƒะดัƒั‚ ัะพั…ั€ะฐะฝัั‚ัŒัั ะธะทะผะตะฝะตะฝะธั
// ะ˜ัะฟะพะปัŒะทัƒะนั‚ะต ั‚ะพ, ะบะพั‚ะพั€ั‹ะผ ะฑัƒะดะตั‚ะต ะฟะพะปัŒะทะพะฒะฐั‚ัŒัั.
Install-Package OutCode.EscapeTeams.ObjectRepository.File
Install-Package OutCode.EscapeTeams.ObjectRepository.LiteDb
Install-Package OutCode.EscapeTeams.ObjectRepository.AzureTableStorage
    
// ะžะฟั†ะธะพะฝะฐะปัŒะฝะพ - ะตัะปะธ ะฝัƒะถะฝะพ ั…ั€ะฐะฝะธั‚ัŒ ะผะพะดะตะปัŒ ะดะฐะฝะฝั‹ั… ะดะปั Hangfire
// Install-Package OutCode.EscapeTeams.ObjectRepository.Hangfire

แƒฉแƒ•แƒ”แƒœ แƒแƒฆแƒ•แƒฌแƒ”แƒ แƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ›แƒแƒ“แƒ”แƒšแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ แƒกแƒแƒชแƒแƒ•แƒจแƒ˜

public class ParentEntity : BaseEntity
{
    public ParentEntity(Guid id) => Id = id;
}
    
public class ChildEntity : BaseEntity
{
    public ChildEntity(Guid id) => Id = id;
    public Guid ParentId { get; set; }
    public string Value { get; set; }
}

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜แƒก แƒ›แƒแƒ“แƒ”แƒšแƒ˜:

public class ParentModel : ModelBase
{
    public ParentModel(ParentEntity entity)
    {
        Entity = entity;
    }
    
    public ParentModel()
    {
        Entity = new ParentEntity(Guid.NewGuid());
    }
    
    public Guid? NullableId => null;
    
    // ะŸั€ะธะผะตั€ ัะฒัะทะธ 1:Many
    public IEnumerable<ChildModel> Children => Multiple<ChildModel>(x => x.ParentId);
    
    protected override BaseEntity Entity { get; }
}
    
public class ChildModel : ModelBase
{
    private ChildEntity _childEntity;
    
    public ChildModel(ChildEntity entity)
    {
        _childEntity = entity;
    }
    
    public ChildModel() 
    {
        _childEntity = new ChildEntity(Guid.NewGuid());
    }
    
    public Guid ParentId
    {
        get => _childEntity.ParentId;
        set => UpdateProperty(() => _childEntity.ParentId, value);
    }
    
    public string Value
    {
        get => _childEntity.Value;
        set => UpdateProperty(() => _childEntity.Value, value
    }
    
    // ะ”ะพัั‚ัƒะฟ ั ะฟะพะธัะบะพะผ ะฟะพ ะธะฝะดะตะบััƒ
    public ParentModel Parent => Single<ParentModel>(ParentId);
    
    protected override BaseEntity Entity => _childEntity;
}

แƒ“แƒ แƒ‘แƒแƒšแƒแƒก, แƒ—แƒแƒ•แƒแƒ“ แƒกแƒแƒชแƒแƒ•แƒ˜แƒก แƒ™แƒšแƒแƒกแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก:

public class MyObjectRepository : ObjectRepositoryBase
{
    public MyObjectRepository(IStorage storage) : base(storage, NullLogger.Instance)
    {
        IsReadOnly = true; // ะ”ะปั ั‚ะตัั‚ะพะฒ, ะฟะพะทะฒะพะปัะตั‚ ะฝะต ัะพั…ั€ะฐะฝัั‚ัŒ ะธะทะผะตะฝะตะฝะธั ะฒ ะฑะฐะทัƒ
    
        AddType((ParentEntity x) => new ParentModel(x));
        AddType((ChildEntity x) => new ChildModel(x));
    
        // ะ•ัะปะธ ะธัะฟะพะปัŒะทัƒะตั‚ัั Hangfire ะธ ะฝะตะพะฑั…ะพะดะธะผะพ ั…ั€ะฐะฝะธั‚ัŒ ะผะพะดะตะปัŒ ะดะฐะฝะฝั‹ั… ะดะปั Hangfire ะฒ ObjectRepository
        // this.RegisterHangfireScheme(); 
    
        Initialize();
    }
}

แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— ObjectRepository แƒ˜แƒœแƒกแƒขแƒแƒœแƒชแƒ˜แƒ:

var memory = new MemoryStream();
var db = new LiteDatabase(memory);
var dbStorage = new LiteDbStorage(db);
    
var repository = new MyObjectRepository(dbStorage);
await repository.WaitForInitialize();

แƒ—แƒฃ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก HangFire-แƒก

public void ConfigureServices(IServiceCollection services, ObjectRepository objectRepository)
{
    services.AddHangfire(s => s.UseHangfireStorage(objectRepository));
}

แƒแƒฎแƒแƒšแƒ˜ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜แƒก แƒฉแƒแƒกแƒ›แƒ:

var newParent = new ParentModel()
repository.Add(newParent);

แƒแƒ› แƒ›แƒแƒฌแƒแƒ“แƒ”แƒ‘แƒ˜แƒ— แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜ แƒ›แƒจแƒแƒ‘แƒšแƒ˜แƒก แƒ›แƒแƒ“แƒ”แƒšแƒ˜ แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ แƒ แƒแƒ’แƒแƒ แƒช แƒšแƒแƒ™แƒแƒšแƒฃแƒ  แƒฅแƒ”แƒจแƒก, แƒแƒกแƒ”แƒ•แƒ” แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜ แƒฉแƒแƒกแƒแƒฌแƒ”แƒ  แƒ แƒ˜แƒ’แƒก. แƒแƒ›แƒ˜แƒขแƒแƒ›, แƒ”แƒก แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ แƒ˜แƒฆแƒ”แƒ‘แƒก O(1) แƒ“แƒ แƒแƒ› แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒฃแƒงแƒแƒ•แƒœแƒ”แƒ‘แƒšแƒ˜แƒ•.

แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ แƒแƒ› แƒ˜แƒžแƒแƒ•แƒแƒ— แƒ”แƒก แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜ แƒกแƒแƒชแƒแƒ•แƒจแƒ˜ แƒ“แƒ แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒแƒ—, แƒ แƒแƒ› แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜ แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜แƒ:

var parents = repository.Set<ParentModel>();
var myParent = parents.Find(newParent.Id);
Assert.IsTrue(ReferenceEquals(myParent, newParent));

แฒ แƒ แƒ›แƒแƒฎแƒ“แƒ? แƒ™แƒแƒ›แƒžแƒšแƒ”แƒฅแƒขแƒ˜ () แƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ‘แƒ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒšแƒ”แƒฅแƒกแƒ˜แƒ™แƒแƒœแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ™แƒแƒœแƒ™แƒฃแƒ แƒ”แƒœแƒขแƒฃแƒšแƒ˜ แƒšแƒ”แƒฅแƒกแƒ˜แƒ™แƒแƒœแƒ˜ แƒ“แƒ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“แƒ˜ แƒ“แƒ แƒ›แƒ”แƒแƒ แƒแƒ“แƒ˜ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ— แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒแƒก. แƒ”แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ’แƒฅแƒแƒœแƒ“แƒ”แƒ— Id (แƒแƒœ แƒกแƒฎแƒ•แƒ แƒ—แƒ•แƒ˜แƒ—แƒœแƒ”แƒ‘แƒฃแƒ แƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ”แƒ‘แƒ˜แƒก) แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ”แƒ—แƒแƒ“แƒ”แƒ‘แƒ˜ แƒงแƒ•แƒ”แƒšแƒ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ–แƒ” แƒกแƒ แƒฃแƒšแƒ˜ แƒ’แƒแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”.

แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒกแƒแƒก ObjectRepository แƒ’แƒแƒ›แƒแƒฌแƒ”แƒ แƒ แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ แƒ›แƒแƒ—แƒ˜ แƒ—แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒชแƒ•แƒšแƒ”แƒšแƒแƒ“, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ—แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ แƒแƒกแƒ”แƒ•แƒ” แƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒแƒ› แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜แƒก แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒ แƒ˜แƒ’แƒจแƒ˜ แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒแƒก. 
แƒ—แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ แƒ”แƒ“แƒแƒœ แƒฐแƒ’แƒแƒ•แƒก POCO แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒแƒก:

myParent.Children.First().Property = "Updated value";

แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฌแƒแƒจแƒแƒšแƒแƒ— แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒ’แƒ–แƒ˜แƒ—:

repository.Remove(myParent);
repository.RemoveRange(otherParents);
repository.Remove<ParentModel>(x => !x.Children.Any());

แƒ”แƒก แƒแƒกแƒ”แƒ•แƒ” แƒแƒ›แƒแƒขแƒ”แƒ‘แƒก แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒก แƒฌแƒแƒจแƒšแƒ˜แƒก แƒ แƒ˜แƒ’แƒจแƒ˜.

แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ?

ObjectRepository แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒก แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜ แƒ˜แƒชแƒ•แƒšแƒ”แƒ‘แƒ (แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ แƒแƒœ แƒฌแƒแƒจแƒšแƒ, แƒแƒœ แƒ—แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒ), แƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒ›แƒแƒ•แƒšแƒ”แƒœแƒแƒก แƒ›แƒแƒ“แƒ”แƒšแƒ˜ แƒจแƒ”แƒ˜แƒชแƒ•แƒแƒšแƒแƒ’แƒแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ. แƒ˜แƒ›แƒžแƒšแƒ”แƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ แƒ›แƒแƒ“แƒ”แƒšแƒ˜ แƒจแƒ”แƒ˜แƒชแƒ•แƒแƒšแƒ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒ›แƒแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ 3 แƒ แƒ˜แƒ’แƒจแƒ˜ - แƒ“แƒแƒกแƒแƒ›แƒแƒขแƒ”แƒ‘แƒšแƒแƒ“, แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒฌแƒแƒกแƒแƒจแƒšแƒ”แƒšแƒแƒ“.

แƒแƒกแƒ”แƒ•แƒ” แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ แƒ˜แƒœแƒ˜แƒชแƒ˜แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒกแƒแƒก แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒฅแƒ›แƒœแƒ˜แƒแƒœ แƒขแƒแƒ˜แƒ›แƒ”แƒ แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒœแƒแƒฎแƒ•แƒแƒก แƒงแƒแƒ•แƒ”แƒš 5 แƒฌแƒแƒ›แƒจแƒ˜. 

แƒ’แƒแƒ แƒ“แƒ แƒแƒ›แƒ˜แƒกแƒ, แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก API, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ˜แƒซแƒฃแƒšแƒ”แƒ‘แƒก แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ˜แƒก แƒ–แƒแƒ แƒก: ObjectRepository.Save().

แƒงแƒแƒ•แƒ”แƒšแƒ˜ แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ˜แƒก แƒฌแƒ˜แƒœ, แƒฃแƒแƒ–แƒ แƒ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒฏแƒ”แƒ  แƒ˜แƒจแƒšแƒ”แƒ‘แƒ แƒ แƒ˜แƒ’แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ (แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ“แƒฃแƒ‘แƒšแƒ˜แƒ™แƒแƒขแƒ˜ แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒ˜ - แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜ แƒแƒ แƒฏแƒ”แƒ  แƒจแƒ”แƒ˜แƒชแƒ•แƒแƒšแƒ แƒแƒœ แƒกแƒฌแƒ แƒแƒคแƒแƒ“ แƒ“แƒแƒ”แƒ›แƒแƒขแƒ/แƒแƒ›แƒแƒ˜แƒจแƒแƒšแƒ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜), แƒ“แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฎแƒ“แƒ”แƒ‘แƒ แƒ—แƒแƒ•แƒแƒ“ แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ. 

แƒงแƒ•แƒ”แƒšแƒ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ›แƒ—แƒ”แƒšแƒ˜ แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜ แƒจแƒ”แƒœแƒแƒฎแƒฃแƒšแƒ˜แƒ, แƒแƒกแƒ” แƒ แƒแƒ›, แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ, แƒ แƒแƒ› แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒœแƒแƒฎแƒแƒก แƒกแƒฎแƒ•แƒ แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒ˜แƒ—, แƒ•แƒ˜แƒ“แƒ แƒ” แƒจแƒ”แƒ˜แƒชแƒ•แƒแƒšแƒ, แƒ›แƒแƒ— แƒจแƒแƒ แƒ˜แƒก แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜แƒก แƒฃแƒคแƒ แƒ แƒแƒฎแƒแƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ”แƒ‘แƒ˜, แƒ•แƒ˜แƒ“แƒ แƒ” แƒ˜แƒ› แƒ“แƒ แƒแƒก, แƒ แƒแƒชแƒ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ แƒ˜แƒ’แƒก แƒ“แƒแƒ”แƒ›แƒแƒขแƒœแƒ”แƒœ.

แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ แƒ แƒแƒ แƒ˜แƒก?

  • แƒงแƒ•แƒ”แƒšแƒ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ .NET แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒข 2.0-แƒ–แƒ”. แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒš แƒ˜แƒฅแƒœแƒแƒก แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒ—แƒแƒœแƒแƒ›แƒ”แƒ“แƒ แƒแƒ•แƒ” .NET แƒžแƒ แƒแƒ”แƒฅแƒขแƒจแƒ˜.
  • API แƒแƒ แƒ˜แƒก แƒœแƒแƒ™แƒแƒ“แƒ˜แƒก แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ“. แƒจแƒ˜แƒ“แƒ แƒ™แƒแƒšแƒ”แƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒกแƒแƒคแƒฃแƒซแƒ•แƒ”แƒšแƒ–แƒ” แƒ™แƒแƒœแƒ™แƒฃแƒ แƒ”แƒœแƒขแƒฃแƒšแƒ˜ แƒšแƒ”แƒฅแƒกแƒ˜แƒ™แƒแƒœแƒ˜, แƒฆแƒแƒœแƒ˜แƒกแƒซแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒšแƒ”แƒ‘แƒก แƒแƒœ แƒแƒฅแƒ•แƒ— แƒกแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜ แƒแƒœ แƒแƒ  แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ—. 
    แƒ”แƒ แƒ—แƒแƒ“แƒ”แƒ แƒ—แƒ˜, แƒ แƒแƒช แƒฃแƒœแƒ“แƒ แƒ’แƒ•แƒแƒฎแƒกแƒแƒ•แƒ“แƒ”แƒก, แƒแƒ แƒ˜แƒก แƒ“แƒแƒ แƒ”แƒ™แƒ•แƒ ObjectRepository.Save();
  • แƒ—แƒ•แƒ˜แƒ—แƒœแƒ”แƒ‘แƒฃแƒ แƒ˜ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ”แƒ‘แƒ˜ (แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒก แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒแƒ‘แƒแƒก):

repository.Set<ChildModel>().AddIndex(x => x.Value);
repository.Set<ChildModel>().Find(x => x.Value, "myValue");

แƒ•แƒ˜แƒœ แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒ›แƒแƒก?

แƒžแƒ˜แƒ แƒแƒ“แƒแƒ“ แƒ›แƒ” แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒ” แƒแƒ› แƒ›แƒ˜แƒ“แƒ’แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒงแƒ•แƒ”แƒšแƒ แƒฐแƒแƒ‘แƒ˜แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒจแƒ˜, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ˜แƒก แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ“แƒ แƒแƒ  แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒก แƒ“แƒ˜แƒ“ แƒฎแƒแƒ แƒฏแƒ”แƒ‘แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒก แƒคแƒ”แƒœแƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒ”แƒ แƒแƒ“ แƒแƒœ แƒ›แƒซแƒ˜แƒ›แƒ” แƒ˜แƒœแƒคแƒ แƒแƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒก แƒ’แƒแƒœแƒกแƒแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒšแƒแƒ“. แƒžแƒ˜แƒ แƒแƒ“แƒแƒ“ แƒฉแƒ”แƒ›แƒ—แƒ•แƒ˜แƒก, แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ litedb-แƒจแƒ˜ แƒแƒœ แƒคแƒแƒ˜แƒšแƒจแƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒฌแƒ”แƒกแƒ˜, แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜แƒ. 

แƒ›แƒแƒ’แƒ แƒแƒ› แƒฌแƒแƒ แƒกแƒฃแƒšแƒจแƒ˜, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒแƒฎแƒšแƒ แƒฃแƒ™แƒ•แƒ” แƒ’แƒแƒฃแƒฅแƒ›แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒขแƒแƒ แƒขแƒแƒžแƒ˜ EscapeTeams (แƒ›แƒ”แƒ’แƒแƒœแƒ, แƒแƒฅ แƒแƒ แƒ˜แƒก แƒคแƒฃแƒšแƒ˜ - แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ แƒ, แƒ˜แƒกแƒ”แƒ• แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒšแƒ”แƒ‘แƒ) - แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒจแƒ”แƒกแƒแƒœแƒแƒฎแƒแƒ“ Azure Table Storage-แƒจแƒ˜.

แƒกแƒแƒ›แƒแƒ›แƒแƒ•แƒšแƒ แƒ’แƒ”แƒ’แƒ›แƒ”แƒ‘แƒ˜

แƒ›แƒกแƒฃแƒ แƒก แƒ’แƒแƒ›แƒแƒ•แƒแƒกแƒฌแƒแƒ แƒ แƒแƒ› แƒ›แƒ˜แƒ“แƒ’แƒแƒ›แƒ˜แƒก แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜ แƒ›แƒ˜แƒœแƒฃแƒกแƒ˜ - แƒฐแƒแƒ แƒ˜แƒ–แƒแƒœแƒขแƒแƒšแƒฃแƒ แƒ˜ แƒกแƒ™แƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒ. แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒ—แƒฅแƒ•แƒ”แƒœ แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— แƒแƒœ แƒ’แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ (sic!), แƒแƒœ แƒ›แƒ˜แƒ˜แƒฆแƒแƒ— แƒ›แƒขแƒ™แƒ˜แƒชแƒ” แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ”แƒ‘แƒ, แƒ แƒแƒ› แƒ”แƒ แƒ—แƒ˜ แƒ“แƒ แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ˜แƒœแƒกแƒขแƒแƒœแƒชแƒ˜แƒ˜แƒ“แƒแƒœ แƒแƒ  แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ˜แƒชแƒ•แƒแƒšแƒแƒก, แƒแƒœ แƒœแƒ”แƒ‘แƒ แƒ›แƒ˜แƒ”แƒชแƒ˜แƒ— แƒจแƒ”แƒชแƒ•แƒแƒšแƒแƒœ แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ˜แƒ— โ€žแƒ•แƒ˜แƒœ แƒแƒ แƒ˜แƒก แƒ‘แƒแƒšแƒ, แƒ›แƒแƒ แƒ—แƒแƒšแƒ˜แƒโ€œ.

แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ—แƒ•แƒแƒšแƒกแƒแƒ–แƒ แƒ˜แƒกแƒ˜แƒ—, แƒ›แƒ” แƒ•แƒฎแƒ”แƒ“แƒแƒ•, แƒ แƒแƒ› แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒกแƒฅแƒ”แƒ›แƒ:

  • แƒจแƒ”แƒ˜แƒœแƒแƒฎแƒ”แƒ— EventLog แƒ“แƒ Snapshot แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜แƒก แƒ›แƒแƒ“แƒ”แƒšแƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“
  • แƒ˜แƒžแƒแƒ•แƒ”แƒ— แƒกแƒฎแƒ•แƒ แƒ˜แƒœแƒกแƒขแƒแƒœแƒชแƒ˜แƒ”แƒ‘แƒ˜ (แƒ“แƒแƒแƒ›แƒแƒขแƒ”แƒ— แƒงแƒ•แƒ”แƒšแƒ แƒ˜แƒœแƒกแƒขแƒแƒœแƒชแƒ˜แƒ˜แƒก แƒ‘แƒแƒšแƒ แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ”แƒ‘แƒ˜ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒก? udp แƒแƒฆแƒ›แƒแƒฉแƒ”แƒœแƒ? master/slave?)
  • แƒ’แƒแƒ˜แƒ›แƒ”แƒแƒ แƒ”แƒ— EventLog แƒ˜แƒœแƒกแƒขแƒแƒœแƒชแƒ˜แƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒ™แƒแƒœแƒกแƒ”แƒœแƒกแƒฃแƒกแƒ˜แƒก แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ RAFT.

แƒแƒกแƒ”แƒ•แƒ” แƒแƒ แƒ˜แƒก แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒแƒฌแƒฃแƒฎแƒ”แƒ‘แƒก - แƒ™แƒแƒกแƒ™แƒแƒ“แƒ˜แƒก แƒฌแƒแƒจแƒšแƒ, แƒแƒœแƒฃ แƒ˜แƒ› แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜แƒก แƒฌแƒแƒจแƒšแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ•แƒšแƒ”แƒœแƒ, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒกแƒแƒช แƒแƒฅแƒ•แƒ— แƒ‘แƒ›แƒฃแƒšแƒ˜ แƒกแƒฎแƒ•แƒ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ. 

แƒ™แƒแƒ“แƒ˜แƒก แƒ™แƒแƒ“แƒ˜

แƒ—แƒฃ แƒแƒฅแƒแƒ›แƒ“แƒ” แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒ”แƒ—, แƒ›แƒแƒจแƒ˜แƒœ แƒ แƒฉแƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ™แƒแƒ“แƒ˜แƒก แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ; แƒ˜แƒก แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒœแƒแƒฎแƒแƒ— GitHub-แƒ–แƒ”:
https://github.com/DiverOfDark/ObjectRepository

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ