Category C Sharp

[C#] แก้ปัญหา Could not load file or assembly ‘System.ComponentModel.Annotations, Version=X.Y.0.0

C# Logo

ลองทำ Automate Test แล้วเอา json มา mock ข้อมูล พอ execute จริง Error ครับ ตรวจสอบ และแก้ไข – ตรวจสอบว่า Code Reference DLL เวอรชันเดียวกัน หรือ ไม่ ตรวจสอบว่า Solution และ Library ต่างๆที่ Reference มาใช้ System.ComponentModel.Annotations ส่วนตัวเคยเจอว่า Project Library ใช้ 5.0.0 และปรากฏว่า Main Project มา…

[C#] DTO/Mapper Class Example

C# Logo

DTO คือ อะไร? DTO คือ Data Transfer Object พูดง่าย ๆ ก็คือเป็น object ที่ใช้ในการส่ง data กันในระบบครับ นอกจากนี้แล้ว การใช้ DTO ยังเป็นการ Limit ข้อมูล หรือมองว่าเป็นการกำหนด Pattern ให้กับ Request / Response กับระบบ และยังป้องกัน Over-posting Attack (คนร้ายเดา Field ได้ถูก แล้วลองส่ง Request เข้ามา) ถ้าไม่มี DTO ดักไว้…

[C#] ให้ Log4net เขียน Log แยกตาม Process Id ของ Application

Ref https://pixabay.com/th/การวิเคราะห์-ข้อมูล-นวัตกรรม-3088958/

จาก Blog ตอนก่อนของ Site ได้ Deploy ตัว .Net App ไว้ที่ Windows Server ไว้ที่ Drive C: แล้วให้ User Remote เข้ามาใช้งานครับ แต่พอเวลามีปัญหามันดัน Write Log ไม่ได้ครับ เพราะ Application ทุกตัวที่ที่รันขึ้นมา ดันเขียน Log ลงไปที่ Path และไฟล์ชื่อเดียวกันครับ ทำให้ User สามารถเปิดโปรแกรมใช้งานได้แค่ 1 Instance เท่านั้นครับ เมื่อทาง Dev ต้องการหาสาเหตุของ…

[C#] ทำให้การ Debug เป็นเรื่องง่าย โดยการใช้ toString()

C# Logo

เคยสังเกตุบ้างไหม ว่าเวลาที่ต้องการดู Data ที่เก็บอยู่ใน Object มันข่างยากลำบากเหลือเกิน ถ้าเป็น List แล้วเนี่ย ถึงกับตายได้เลย จากรูปด้านล่าง ถ้ามีใน List มี 18 ตัว ถ้าอยากหา Object ที่สนใจต้องกดไล่ดูมากที่สุดถึง 18 ครั้ง จะมาน่ั่งไล่กดเปิดดูที่ละอันมันก็ ไม่คุ้มนะ เปลืองแรงไป ดังรูป แล้วมันมี Trick อะไรช่วยไหม ตอบเลยว่ามีครับ ใช้ toString() สิ โดยเพิ่มเข้าไปที่ Object ของเราเลย อย่างของผม ลอง Complie แล้ว Debug…

[C#] มาดูกันว่า User Remote เข้ามาเปิดใช้ Application จากเครื่องไหน

C# Logo

ก่อนอื่นมาดูปัญหากันก่อนครับ ว่าทำไมถึงต้องไปไล่ดูว่า มีการ Remote จากเครื่อง User เพื่อมาใช้งาน Application ที่ติดตั้งบนเครื่อง Server หรือป่าว ? เพราะ IT ของลูกค้า อยากรู้ว่ามีใครใช้งานในระบบบ้าง แล้วใช้งานที่เครื่องไหน แต่บังเอิญว่ารอบนี้ ตัว Application ที่พัฒนาถูกไปติดตั้งบรเครื่อง Windows Server พอ User Remote เข้ามาใช้งาน ปรากฏว่าระบบลง Log และ Active User มาจากเครื่อง Serer ที่เป็น Windows Server ทั้งหมดเลยครับ โดยคำสั่ง C# ที่ใช้ดึงว่าเครื่องที่…

[C#] ตั้งชื่อเล่นของ Class (Alias) ให้เรียกใช้งานได้ง่าย

Reference: https://pixabay.com/en/colored-pencils-colour-pencils-star-374771/

เวลาเราพัฒนาระบบที่มันซับซ้อนๆมากๆ ปัญหาที่ปวดหัวที่สุดเลย คือ การตั้งชื่อ บางทีชื่อตัวแปรยาวๆ ถ้าย่อไป อาจจะงงได้ Dev เลยใช้ชื่อเต็มไป พอลองเอาตัวแปรเหล่านี้มาใช้ มันดูเกะกะรกตามากครับ กว่าจะรู้ว่า ตั้งชื่อเล่นของ Class (Alias) ให้เรียกใช้งานได้ง่ายกันดีกว่า โดย C# มันมีวิธีในการการตั้งชื่อเล่น(Alias) กันนะ มาดู Code เดิมกันดีกว่า ถ้าสังเกตุใน Code พบว่า RebalanceProcessExtensions.Col_OriginalNAV ชื่อ Class RebalanceProcessExtensions มันยาวมากๆ ครับ ถ้าทำไปนานๆ Code ตรึมครับ ดูยาก ที่นี้มาลองใช้ตัวช่วยกันดีกว่า ลองใช้ Class Alias โดยการย่อชื่อ…

[Dapper] Query Parent-Child อย่างไร ?

หลังจากลองทำ Framework ที่เอา Dapper เป็น ORM ครับ ตอนนี้ก็ติดปัญหาว่า เราจะดึงข้อมูลที่อยู่ในรูปแบบ Parent-Child กันอย่างไรครับ โดยผมมีรายละเอียด ดังนี้ โจทย์ที่ผมต้องการ คือ เวลา Query ข้อมูลจาก Table Corporateaction แล้ว ให้มันดึงข้อมูลของ Table ลูก CorporateDetail ขึ้นมาให้หมด โดยการ Query เพียงคร้งเดียวเท่านั้นครับ POCO Class ของผม มีโครงคร่าวๆ ดังนี้ครับ Query ที่ผมเขียนไว้ Code ในส่วนของ Data Access…

[C#] ลองใช้ Log4Net มาเก็บบันทึกของ Console App กัน

หลังจากสร้าง draft ทิ้งไว้นานมาแล้ว วันนี้มาลองรื้อบทความเก่าๆมาเขียนให้เสร็จครับ สำหรับ Blog ตอนนีเป็นการลองใช้ Log4Net กับ console app ครับ เอาหละมาลุยกันเลยครับ เตรียมตัว & ติดตั้ง สร้าง Configuration file เชี่อม config กับ Console App  

[C#] Constants Interfaces ของ Java เทียบเท่ากับอะไรใน C#

ก่อนจะมาเข้าเรื่องของ C# กันลองย้อนไปทาง Java ก่อน โดยเจ้าภาษา Java นี่ มันไม่มี Global Variables ให้ ซึ่งถ้าเราต้องการ Set ค่าคงที่แล้วต้องการให้ทุก Class เห็น และสามารถใช้งานได้ เราต้องทำ Constants Interfaces มองง่ายๆเลย คือ Interface ที่มีแต่ Constant แหละ ตามตัวอย่างเลย มาทาง C# บ้าง ทำไม่ได้ครับ (ส่วนตัว ผมคิดว่าดีที่ C# ทำไม่ได้อ่า) เพราะมันแปลกๆกับการเอา Interface มาเก็บ Const และถ้ามีการจัดหมวดหมู่เยอะนี้…