มาใช้ Entity Framework กับ MySQL กันเถอะ

เชื่อว่าคนเขียน C# .Net บน Visual Studio คงจะรู้จัก OR/M ที่ชื่อว่า "Entity Framework" กันเป็นอย่างดีกันอยู่แล้ว และคงจะรู้อยู่แล้วว่า มันสามารถทำงานกับ SQL Server ได้อย่างลงตัวเลยทีเดียว แต่ก็อย่างว่าแหละ Licence ของ SQL Server นั้นราคาไม่ใช่น้อยๆกันเลยทีเดียว แน่นอนครับ เราต้องหาทางออกให้มัน

ทางออกของผมคือ ใช้ Database ตัวอื่นสิ! ใช่! มันเป็นทางออกที่ฟังดูดีครับ แล้วเราจะต้องหัดเขียนคำสั่งใหม่หรอ? อยากเขียน LINQ อ่ะ จะทำยังไงดี?

แล้วถ้าเราปรับสิ่งที่เราเคยใช้อยู่แล้ว ให้กับ Database ทางเลือกของเราหล่ะ? เราแทบไม่ต้องไปรู้วิธีเขียนใหม่ เขียนแบบเดิม ได้ผลลัพธ์ที่ตรงใจ คงจะดีไม่น้อย

โดยฐานข้อมูลนั้น ผมเลือกเป็น MySQL ครับ เพราะง่าย, เป็นที่นิยม, Community เหนียวแน่น และแน่นอนครับ เราต้องทำให้มันใช้ OR/M ตัวเดิมที่เราเขียนเชื่อมต่อกับ SQL Server อยู่แล้ว นั่นก็คือ Entity Framework ครับ เอ้า รออะไรหล่ะ ไปเริ่มกันเลยดีกว่า

สิ่งที่ต้องติดตั้ง

หลังจากดาวน์โหลดมาและก็ติดตั้งมันให้เรียบร้อยซะ หลังจากนั้นก็ไปสร้าง Database ใน MySQL ให้เรียบร้อย เดี่ยวเราไปดูวิธีการ Setup ตัว Project ของเรา ให้ใช้งาน MySQL พร้อมกับ Entity Framework กัน

วิธี Setup Project ให้เชื่อมต่อกับ MySQL และ Entity Framework

  • เปิดโปรเจ็คคุณขึ้นมา (หรือจะสร้างใหม่ก็แล้วแต่) ใน Visual Studio ให้เรียบร้อย
  • ให้ทำการ Add Reference ตัว Library ของ MySQL ลงใน Project ให้เรียบร้อย โดยคลิกขวาที่ Reference ตัว Project ที่ต้องการ
  • คุณจะเจอหน้า Reference Manager ขึ้นมา กดปุ่ม Browse เลยครับ
  • ไปที่ Path C:\Program Files (x86)\MySQL\Connector.NET 6.9\Assemblies\v4.5 แล้วเลือกทุกไฟล์ห หลังจากนั้นกด Add
  • เลือกทุกอย่างที่ขึ้นเหมือนในรูป แล้วกด OK
  • สร้าง Folder ใน Project ชื่อว่า Database ขึ้นมา เพื่อไว้เก็บไฟล์ของ Entity Framework ครับ
  • หลังจากนั้น คลิกขวาที่ Folder ที่สร้างมาใหม่ เลือก Add => ADO.NET Entity Data Model จะมี Popup ให้ตั้งชื่อ Model ให้ตั้งชื่อ Model แล้วกด Add

    ถ้ามันไม่ขึ้น ให้เลือก New Item ด้านซ้ายเลือก Data แล้วเลือก ADO.NET Entity Data Model ให้ตั้งชื่อ Model ให้ตั้งชื่อ Model แล้วกด Add
  • เลือก EF Designer from Database แล้ว Next
  • กด New Connection เพื่อเพิ่ม Connection ใหม่
  • ถ้าไม่มีให้เลือก Data source ให้กดปุ่ม Change
  • ถ้าไม่มีอะไรผิดพลาด จะมี MySQL Database ให้เลือก กด OK
  • ตั้งค่าการเชื่อมต่อไปยังเครื่อง MySQL ให้เรียบร้อย กด OK
  • จะกลับมายังหน้า Wizard การตั้งค่า Entity Data Model ให้ติ๊ก Yes, include the sensitive data in connection string แล้ว Next
  • หากเกิด Error ขึ้นในหน้าต่อไป ไม่ต้องตกใจนะครับ เราต้องเข้าไป Config ให้ตัว Entity Framework เรียกใช้ Library จาก MySQL ก่อน กด Previous กลับมาก่อน
  • ก่อนอื่น เราจะต้องแก้ Bug ของ MySQL 5.7 ที่เข้ากันไม่ได้บางส่วนกับ Entity Framework ก่อน เราจะต้องเข้าไป Config ใหม่นิดนึงครับ เปิด MySQL Command Line Client ขึ้นมาครับ เลือก ฐานข้อมูลให้เรียบร้อย แล้วใช้คำสั่ง ดังนี้
set global optimizer_switch='derived_merge=off';
set optimizer_switch='derived_merge=off';

Ref : https://bugs.mysql.com/bug.php?id=79163

  • เปิด App.config หรือ Web.config แก้ในส่วนของ Provider จาก
 <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>

เป็น

    <providers>
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6"></provider> 
    </providers>
  • Build Project ใหม่ 1 รอบครับ
  • กลับมาที่ตัว Wizard ของ Entity Data Model อีกครั้ง ให้ติ๊ก Yes, include the sensitive data in connection string แล้วลองกด Next ดูอีกครั้งครับ
  • ถ้าได้รูปด้านล่างนี้ แสดงว่าทำสำเร็จแล้วครับ เลือก Table ที่ต้องการแล้ว Finish เลยครับ

แค่นี้ก็ได้ Entity Framework ที่ใช้งานกับ MySQL ได้แล้วครับ