Skip to content
Home » [Update] รู้จัก Entity Framework (EF) คืออะไร ใช้ทำอะไร และมีประโยชน์อย่างไรบน .Net Framework | ef แลกเปลี่ยน – NATAVIGUIDES

[Update] รู้จัก Entity Framework (EF) คืออะไร ใช้ทำอะไร และมีประโยชน์อย่างไรบน .Net Framework | ef แลกเปลี่ยน – NATAVIGUIDES

ef แลกเปลี่ยน: คุณกำลังดูกระทู้

รู้จัก Entity Framework (EF) คืออะไร ใช้ทำอะไร และมีประโยชน์อย่างไรบน .Net Framework

รู้จัก Entity Framework (EF) คืออะไร ใช้ทำอะไร และมีประโยชน์อย่างไรบน .Net Framework การพัฒนา Application ด้วย .Net Framework เพื่อใช้งานทั่ว ๆ ไป การติดต่อกับ Database ถือเป็นหัวใจหลักในการพัฒนาโปรแกรม รองจากการวางโครงสร้างของ Application และจากประสบการณ์การเขียนโปรแกรมและผ่านโปรเจคมามาหลายตัว ทั้งขนาดเล็กคนเดียว หรือ 2-3 คน หรือทีมเป็น 10 คน ประสบการณ์หนึ่งที่ได้จากการทำงานเป็นทีม คือการไม่มีมาตตรฐานของการเขียน Coding ในแนวคิดว่าสไตล์ใครสไตล์มัน การออกแบบ Class ที่ใช้ในการติดต่อกับ Database ค่อนข้างจะมีความสำคัญมาก ถ้าออกแบบและเขียนไม่ดีตั้งแต่แรกเมื่อโปรแกรมพัฒนาไปได้และเริ่มมีขนาดใหญ่ การทำงานที่ซับซ้อนมากขึ้น หรือเมื่อโปรแกรมเมอร์คนอื่น ๆ มารับช่วงต่อ และขาดความเข้าใจและแนวคิดของคนที่ Design ไว้ตั้งแต่แรก เราจะเห็นการการติดต่อกับ Database ที่เริ่มมั่วเกิดขึ้น การเปิด-ปิดหลายครั้ง เพื่อเขียน SQL Query ให้ได้ตรงกับความต้องการ จะเกิดข้อมูลออกมาใช้งาน ซ้ำ ๆ ไม่มีมาตรฐานว่าต้องเรียกใช้ตอนไหน และ เรียกใช้อย่างไร ในหลายครั้งจะเห็นการสร้าง Method ขึ้นมาใหม่ที่ไม่มีความจำเป็นว่าเขียนแบบนี้มีข้อดีและข้อเสียอย่างไร และจะมีปัญหากับ Performance ในอนาคตเมื่อมี Database ใหญ่ขึ้นหรือผู้ใช้จำนวนมากขึ้นหรือไม่ และยิ่งการออกแบบ Class ของโปรแกรมเมอร์ที่วางโครงของแต่ล่ะคนก็ไม่สามารถนำมาเป็นมาตรฐาน ขาดประสบการณ์ ว่า Pattern ที่ Design นั้นมันจะสามารถทำงานได้อย่างรวดเร็วและมีประสิทธิภาพ สามารถพัฒนาต่อยอดในอนาคต เมื่อมีความต้องการใหม่ ๆ เกิดขึ้น และจะมั่นใจได้ว่าอย่างไรว่าไม่เป็นปัญหาเกี่ยวกับ Performance ของโปรแกรมในอนาคต ซึ่งเคสดังกล่าวที่ได้พูดถึง ผมได้พบเจอมากับตัวเองในโปรเจคหลายตัว ได้เห็นถึงปัญหาการออกแบบที่ค่อนข้างจะไม่มีมาตรฐาน และเป็น Concept เก่าใช้กันไม่ต่ำกว่า 7-8 ปีมาแล้ว

สาเหตุหลักหนึ่ง ของการพัฒนา Application ในทีมส่วนมาก คือ เมื่อเขียนโปรแกรมไปซะพัก จะเกิดปัญหาว่า ใครอยากเขียนอะไรก็เขียน มีการประกาศ Variable , Function ใหม่ ๆ ขึ้มามากมาย ใช้เหตุผลที่ว่าขอให้โปรแกรมมันทำงานได้ก็พอ แต่ Performance ที่ได้ค่อนข้างจะ Drop ลงมาก เช่น ระบบทำงาน Execute ไป 30 วินาที แทนที่การทำงานจริง ๆ น่าจะไม่ควรเกิน 2-3 วินาทีเท่านั้น จะเพิ่มฟังก์ชั่นอื่น ๆ เช่น เกี่ยวกับ Transaction ของโปรแกรม หรือจัดทำ Log กลับต้องรื้อโปรแกรมใหม่เกือบทั้งหมด บางครั้งก็ทำอะไรเพิ่มเติมไม่ได้ เพราะโปรแกรมมีขนาดใหญ่มากเกินจะมาตามแก้ ก็ต้องปล่อยให้มันทำงานแบบผิด ๆ ถูก ๆ แล้วค่อยมาทำการเขียน Query เพื่อซ่อม Data ซึ่งเป็นการแก้ปัญหาที่ปลายเหตุ และเป็นการวาง Logic ที่ทำให้คนมารับช่วงต่อเกิดอาการ งง และ สับสนว่า จะสร้างมันมาเพื่ออะไร??

ปัญหาดังที่กล่าวมานี้ใน .Net Framework ได้มีการออก Library ออกมาหลายตัวเพื่อมาลดปัญหาของการสร้างมาตรฐานในการติดต่อกับ Database อันที่จริงมันมีอยู่หลายตัวมาก แต่ตัวหนึ่งที่น่าสนใจและมากับ .NET Framework ชื่อว่า Entity Framework ทำหน้าที่เป็น Entity Data Model (คลาสสำหรับจัดการกับ Database) วัตถุประสงค์หลัก ๆ ของมันคือ ทำหน้าที่เป็น Data Layer ร่วมกับ ADO.Net ในการที่จะเชื่อมต่อกับ Database และเราจะสั่งให้มันทำงานกับ Table ต่าง ๆ ผ่าน Layer นี้ สำหรับ Concept ของ Entity Framework ออกมาได้ซะพักละหลายปีและหลายเวอร์ชั่นแล้ว และหลายคนก็ได้เลือกใช้ไปแล้วในหลายโปรเจค ซึ่งมันก็มีทั้งข้อดีและข้อเสีย แต่สำหรับผมแล้วใช้มันมา 3-4 โปรคเจคแล้ว และมันก็ค่อนข้างจะทำงานได้เร็วไม่มีปัญหาในเรื่องของ Performance หรือปัญหาในเรื่องของ Design Pattern การพัฒนาต่อยอดในอนาคต และสมาชิก ๆ ในทีมหลายคนก็สามารถเขียนและพัฒนาได้ในรูปแบบที่เดียวกัน ซึ่งสำหรับผมแล้วมันค่อนข้างเยี่ยมและทำงานได้อย่างน่าพอใจ และในบทความเกี่ยวกับ Entity Framework ผมจะพยายามใช้ศัพท์ที่เข้าใจง่าย และ ไม่ซับซ้อน เพราะก่อนจะเขียนบทความนี้ ผมลองหาอ่านจากหลาย ๆ เว็บ แล้วมีแค่ใช้ศัพท์ที่เข้าใจยาก และ อ่านไปก็ค่อนข้างจะมีแต่น้ำ ไม่ค่อยมีเนื้อหาที่สรุปให้สามารถนำไปใช้งานจริงได้

Entity Framework ทำหน้าที่เป็น Layer ตัวกลางในการติดต่อระหว่าง Application กับ Database

Entity Framework คืออะไร ???
คือ Library ที่ทำหน้าที่จัดการ Database ร่วมกับการเขียน Class บนโปรแกรมที่เราจะเขียนขึ้น แนวคิดของ Entity Framework อยู่ในรูปแบบของ Object/Relational Mapping (O/RM) คือ Entity Framework จะสร้าง Layer ทำหน้าที่เป็น Database Model ขึ้นมาเป็น Class ใน Project ที่เรากำลังเขียน โดยจะ Mapping ตัว Class ที่จะสร้างขึ้นใหม่นี้ กับ Table , View และ Stored Procedure จาก Database มาไว้บนโปรเจค ซึ่งต่อไปนี้เราสามารถเรียกใช้มันผ่าน Class ที่อยู่ในโปรเจคได้เลย โดยไม่ต้องไปเขียนคำสั่ง SQL Statement ของ INSERT , UPDATE หรือ DELETE แล้วค่อยส่งไป Execute ที่ Table อีก เรียกได้ว่าต่อไปนี้ คำสั่ง SQL บนโปรเจคแทบจะไม่ต้องเขียนอีกเลย และพวกคำสั่ง ที่ใช้สำหรับการจัดการกับ Data ก็ไม่จำเป็นอีกต่อไปแล้ว เพราะตัว Entity Framework จะทำหน้าที่แทนเราทั้งหมดและให้เราเรียกใช้งาน Table ต่าง ๆ ผ่าน EntitySet ที่มันสร้างขึ้น ส่วนรูปแบบภาษา Syntax ที่จะใช้เขียนให้ Entity Framework ทำงานแทนคือจะใช้ Syntax ของ LINQ to Entitiesทำงานร่วมกับ Generic ของ List ซึ่งเจ้า LINQ นี้จะมี Syntax ที่แตกต่างกับ SQL Statement พอสมควร แต่สามารถเข้าใจง่ายตามรูปแบบของภาษาเช่น VB.Net หรือ C# และก็ไม่ยากที่จะเข้าใจมันได้

Entity Framework จะสร้างจำลอง Model Entities ซึ่งจะจำลองชื่อ EntitySet ให้เหมือนกับชื่อของ Table และ View

Model Entities คืออะไร ?? เป็น Object ใหญ่สุดของ Entity Framework ซึ่งเปรียบเสมือน Class หลักที่รวบรวม EntitySet หรือ Table,View,Stored Procedure มาไว้รวมกัน เราสามารถเพิ่มคุณสมบัติต่าง ๆ ของ EntitySet ได้ เช่น Relation , Data Type หรืออื่น ๆ ภายในหนึ่ง โปรเจคสามารถมีได้หลาย Model Entities และการเรียกใช้งานก็จะเรียกได้มากกว่าหนึ่ง Entities ให้ทำงานพร้อม ๆ กันได้

EntitySet, ObjectSet, DbSet คืออะไร ?? เป็น Object ย่อยของแต่ล่ะ Model Entities ประกอบด้วย Table,View,Stored Procedure เป็น Method ย่อย ๆ ซึ่งเปรียบเสมือน Table และ EntitySet นี้จะคอยทำหน้าที่แลกเปลี่ยนข้อมูลระหว่าง Database กับ Application ที่เราสั่งให้ทำงาน

การเรียกใช้งาน Model Entities
ในการเรียกใช้งาน Database ทั่ว ๆ ไป เราจะต้องทำการกำหนด Connection String พร้อมกับ Open Connection จากนั่นจะสร้าง Command ให้มัน SELECT, INSERT, UPDATE หรือ DELETE ผ่าน Command ของ ADO.Net แต่ถ้าเราเขียนบน Entity Framework เราแทบจะไม่ต้องสนใจคำสั่งพวกนี้เลย เพราะในการเริ่มต้นใช้งาน เราจะเริ่มด้วยการ New Entities หรือเรียกใช้งาน Class ของ Entities มันจะเริ่มทำงานให้เราอัตโนมัติ ซึ่งหลังจากนั้นเราสามารถทำการ Select รายการข้อมูลจาก Table ต่าง ๆ ได้ทันที

เปรียบเทียบ ADO.Net แบบปกติ กับ Entity Framework

ADO.Net แบบปกติ

(C#)

String strConnString = "Server=localhost;UID=sa;PASSWORD=;database=mydatabase;Max Pool Size=400;Connect Timeout=600;";

SqlConnection objConn = new System.Data.SqlClient.SqlConnection(strConnString);
objConn.Open();

String strSQL = "SELECT * FROM customer";

SqlDataReader dtReader;
objCmd = new System.Data.SqlClient.SqlCommand(strSQL, objConn);
dtReader = objCmd.ExecuteReader();

objConn.Close();
objConn = null;

(VB.Net)

Dim strConnString As [String] = "Server=localhost;UID=sa;PASSWORD=;database=mydatabase;Max Pool Size=400;Connect Timeout=600;"

Dim objConn As SqlConnection = New System.Data.SqlClient.SqlConnection(strConnString)
objConn.Open()

Dim strSQL As [String] = "SELECT * FROM customer"

Dim dtReader As SqlDataReader
objCmd = New System.Data.SqlClient.SqlCommand(strSQL, objConn)
dtReader = objCmd.ExecuteReader()

objConn.Close()
objConn = Nothing

ADO.Net ด้วย Entity Framework

(C#)

using (var db = new myDatabaseEntities())
{
	var ds = db.CUSTOMER.ToList();
}

(VB.Net)

Using db = New myDatabaseEntities()
	Dim ds = db.CUSTOMER.ToList()
End Using

Example Syntax การ SELECT

SQL Statement การ SELECT ด้วย Query

SELECT * FROM CUSTOMER ORDER BY CUSTOMER_ID ASC


Syntax Entity Framework ด้วย LINQ (C#)

var ds = db.CUSTOMER.OrderBy(o => (o.CUSTOMER_ID)).ToList();


Syntax Entity Framework ด้วย LINQ (VB.Net)

Dim ds = db.CUSTOMER.OrderBy(Function(o) (o.CUSTOMER_ID)).ToList()

Example Syntax การ INSERT

SQL Statement การ INSERT ด้วย Query

INSERT INTO CUSTOMER (CUSTOMER_ID,NAME,EMAIL,COUNTRY_CODE,BUDGET) 
  VALUES ('C005','Rut Wisarut','[email protected]','TH',5000000,0)


Syntax Entity Framework ด้วย LINQ (C#)

db.CUSTOMER.Add(new CUSTOMER()
    {
	CUSTOMER_ID = "C005",
	NAME = "Rut Wisarut",
	EMAIL = "[email protected]",
	COUNTRY_CODE = "TH",
	BUDGET = 5000000,
	USED = 0,
    });


Syntax Entity Framework ด้วย LINQ (VB.Net)

db.CUSTOMER.Add(New CUSTOMER() With { _
	.CUSTOMER_ID = "C005", _
	.NAME = "Rut Wisarut", _
	.EMAIL = "[email protected]", _
	.COUNTRY_CODE = "TH", _
	.BUDGET = 5000000, _
	.USED = 0 _
})

Example Syntax การ UPDATE

SQL Statement การ UPDATE ด้วย Query

UPDATE CUSTOMER  SET BUDGET = 6000000,USED = 100000 WHERE o.CUSTOMER_ID = C005


Syntax Entity Framework ด้วย LINQ (C#)

var update = db.CUSTOMER.Where(o => (o.CUSTOMER_ID == "C005")).FirstOrDefault();
if (update != null)
{
	update.BUDGET = 6000000;
	update.USED = 100000;
}


Syntax Entity Framework ด้วย LINQ (VB.Net)

Dim update = db.CUSTOMER.Where(Function(o) (o.CUSTOMER_ID = "C005")).FirstOrDefault()
If Not IsNothing(update) Then
    update.BUDGET = 6000000
    update.USED = 100000
End If

Example Syntax การ DELETE

SQL Statement การ DELETE ด้วย Query

DELETE FROM CUSTOMER WHERE CUSTOMER_ID = 'C005'


Syntax Entity Framework ด้วย LINQ (C#)

var del = db.CUSTOMER.Where(o => (o.CUSTOMER_ID == "C005")).FirstOrDefault();
if (del != null)
{
    db.CUSTOMER.Remove(del);
}


Syntax Entity Framework ด้วย LINQ (VB.Net)

Dim del = db.CUSTOMER.Where(Function(o) (o.CUSTOMER_ID = "C005")).FirstOrDefault()
If Not IsNothing(del) Then
    db.CUSTOMER.Remove(del)
End If

Entity Framework ยังสามารถในการ Execute คำสั่ง SQL Statement ทั้ง SELECT,INSERT,UPDATE และ DELETE

Entity Framework Execute SQL Statement (C#)

string strSQL = string.Empty;
strSQL = "INSERT INTO CUSTOMER ";
strSQL += " (CUSTOMER_ID,NAME,EMAIL,COUNTRY_CODE,BUDGET,USED)";
strSQL += " VALUES";
strSQL += " ('C005','Rut Wisarut','[email protected]'";
strSQL += ",'TH','5000000','0')";
db.Database.ExecuteSqlCommand(strSQL);


Entity Framework Execute SQL Statement (VB.Net)

            Dim strSQL As String = String.Empty
            strSQL = "INSERT INTO CUSTOMER "
            strSQL = strSQL & " (CUSTOMER_ID,NAME,EMAIL,COUNTRY_CODE,BUDGET,USED)"
            strSQL = strSQL & " VALUES"
            strSQL = strSQL & " ('C005','Rut Wisarut','[email protected]'"
            strSQL = strSQL & ",'TH','5000000','0')"
            db.Database.ExecuteSqlCommand(strSQL)

ในการใช้ Entity Framework สามารถอ้างถึง Table และ Attribute Field ใน Table ชนิดของ Data Type ได้อย่างถูกต้อง ไม่มีปัญหาเรื่องชื่อ Table หรือ Field ผิดแน่นอน ลดปัญหาการ Insert ข้อมูลหรือพวก SQL Injection , ค่า Null , DBNull , Data Type ซึ่งเป็นปัญหาเก่า ๆ จะไม่เป็นปัญหาอีกต่อไป ประเด็นสำคัญของ Entity Framework คือ มันค่อนข้างจะให้ความสำคัญของ Key และ Relation ของ Table อย่างมาก โดยเฉพาะ Primary Key ถ้า Project ของเราขาดตัวนี้ ก็แนะนำให้หลีกเลี่ยงการใช้ Entity Framework เพราะจะต้องไปจัดการเพิ่ม Key ใน EntitySet ก่อนที่จะใช้งาน ส่วนประเด็นของ Relation ของ Table อันนี้ไม่จำเป็นต้องใช้ก็ได้ แต่ถ้า Table ของเราทำการภูก Relation ไว้แล้วการใช้ Entity Framework จะมีความมหัสจรรย์ยิ่งขึ้น เช่น เราสามารถดึงข้อมูลของ Table พร้อมทั้งข้อมูลที่ Relation ของ Table ที่เกี่ยวข้องออกมาได้ด้วยการเลือกข้อมูลครั้งเดียว โดยที่ไม่ต้องมาทำการ Join Table แต่อย่างใด ยกตัวอย่างขอมูลของ ลูกค้า กับ รายการสั่งซื้อ เราเพียงแค่ Select ข้อมูลลองลูกค้าตาม รหัสูลูค้า หลังจากนั้นข้อมูลพวก Order ต่าง ๆ จะขึ้นมาให้เราอัโตนมัติ สามารถเรียกใช้ได้ทันที โดยไม่ต้องไป Select เพิ่มอีก และยังมีความสามารถในการทำ Cascade พวก Insert , update และ delete แต่ในทางปฏิบัติแล้วการออกแบบ Table ให้มี Relation ถูกต้องเปะ ๆ แทบจะเป็นไปไม่ได้เลย ฉะนั้นทางเลือกของ Relation Table ผมจะไม่ค่อยให้ความสำคัญเท่าไหร่ เพราะสามาาถไปจัดการได้ที่การ Join ข้อมูลแทน

การเชื่อม Relation ของ Table , View จะช่วยให้การทำงานของ Entity Framework นั้นได้ประสิทธิภาพสูงสุด

Future และ Performance ของ Entity Framework ??

Entity Framework ได้พัฒนามาหลาย Version แล้ว ปัจจุบันอยู่ที่เวอร์ชั่น 6.0 และยังมี Tool ร่วมกับการเขียน .Net Application ใหม่ ๆ หลายตัว เช่น MVC ฉะนั้น Entity Framework จะไม่ถูกทอดทิ้งและ มีอนาคตแน่นอน รวมทั้งมีการพัฒนา Feature และความสามารถใหม่ ๆ ออกพร้อม ๆ กับ Version ของ .Net Framework

Performance ของ Entity Framework
ในความคิดเห็นส่วนตัวของการใช้ Entity Framework ช่วยให้การเขียนโปรแกรมนั้นง่ายและรวดเร็วมาก แต่เรื่อง Performance ของ คิดว่าไม่ได้ทำงานเร็วกว่าออกแบบ Class เองซะเท่าไหร่นัก เพราะสุดท้ายแล้ว Entity Framework ยังคงใช้ ADO.Net ในการทำงานเหมือนเดิม แต่มันจะมีประสิทธิภาพที่เหนือกว่าในด้าน สภาพแวดล้อมที่ Entity Framework ได้สร้างขึ้น ลดความซ้ำซ้อน และการทำงานที่ไม่จำเป็น เมื่อโปรแกรมมีขนาดใหญ่และซับซ้อนมากขึ้น โปรแกรมจึงไม่เกิด Process และการทำงาน ที่ไม่จำเป็น เพราะ Entity Framework ได้สร้างมาตรฐานเอาไว้ ในการเขียนที่ค่อนข้างจะเป็นระบบ เช่น Table จะต้องมี Key และการเขียนมีการ Validate ตัว Data Type ให้ถูกต้องก่อนที่จะ Build ผ่านได้ ซึ่งปัจจัยหลัก ๆ นี้ จะลดข้อผิดพลาดในขณะ Run-time ภาพรวมของโปรแกรมจึงสามมารถทำงานได้อย่างมีประสิทธิภาพและรวดเร็วราบรื่น รวมทั้งยังสามารถพัฒนาต่อยอดได้ง่ายด้วย

ข้อเสียของ Entity Framework
เนื่องจาก Entity Framework ต้องใช้รูปแบบ Syntax ของ LINQ ในการเขียนด้วยภาษาVB.Net หรือ C# ซึ่งในกรณีที่ซับซ้อนมาเกินการเขียนบน Syntax LINQ เพื่อให้ Entities ทำงานได้ตรงกับความต้องการนั้นค่อนข้างจะยากพอสมควร ฉะนั้นหลาย ๆ คำสั่งอาจจะต้องอาศัยการสร้างการเขียน Query บน VIEW Table หรือ Stored Procedure เข้ามาทำงานแทน จะทำงานได้รวดเร็วกกว่าการจัดการที่ Entities

ก่อนอื่นต้องเข้าใจก่อนว่า Entity Framework ไม่ได้เป็น Framework ที่ช่วยในการ Design Pattern วางโครงของ Application ทั้งหมด แต่จะเข้ามาจัดการ Layer ที่เป็น Database Model เท่านั้น และสามารถประยุกต์ใช้กับ Database ได้หลาย ๆ ประเภท ไม่ว่าจะเป็น SQL Server , MySQL, MS Access , Oracle และอื่น ๆ ขึ้นอยู่กับ Driver ที่จะเลือกใช้ ฉะนั้นการที่จะให้ Entity Framework ทำงานได้อย่างมีปสิทธิภาพสูงสุด ต้องอาศัยการออกแบบทั้ง Business Logic ทำงานร่วมกับ Model รวมทั้งการเขียน Code จากการวางโครงที่ดี

Table สำหรับการทดสอบ Entity Framework ในบทความ ให้สร้าง Table หรือตารางขึ้นมาตามโครงสร้างนี้ (SQL Server Database)

Table : CUSTOMER

CREATE TABLE [CUSTOMER](
	[CUSTOMER_ID] [varchar](4) NOT NULL,
	[NAME] [varchar](50) NULL,
	[EMAIL] [varchar](50) NULL,
	[COUNTRY_CODE] [varchar](2) NULL,
	[BUDGET] [decimal](18, 2) NULL,
	[USED] [decimal](18, 2) NULL,
 CONSTRAINT [PK_CUSTOMER] PRIMARY KEY CLUSTERED 
(
	[CUSTOMER_ID] ASC
) ) ON [PRIMARY]

INSERT INTO CUSTOMER VALUES ('C001', 'Win Weerachai', '[email protected]', 'TH', 1000000, 600000);
INSERT INTO CUSTOMER VALUES ('C002', 'John  Smith', '[email protected]', 'UK', 2000000, 800000);
INSERT INTO CUSTOMER VALUES ('C003', 'Jame Born', '[email protected]', 'US', 3000000, 600000);
INSERT INTO CUSTOMER VALUES ('C004', 'Chalee Angel', '[email protected]', 'US', 4000000, 100000);


โครงสร้างและข้อมูลของตาราง CUSTOMER

Table : COUNTRY

CREATE TABLE [COUNTRY](
	[COUNTRY_CODE] [varchar](2) NOT NULL,
	[COUNTRY_NAME] [varchar](100) NULL,
 CONSTRAINT [PK_COUNTRY] PRIMARY KEY CLUSTERED 
(
	[COUNTRY_CODE] ASC
)) ON [PRIMARY]

INSERT INTO COUNTRY VALUES ('TH', 'Thailand  ');
INSERT INTO COUNTRY VALUES ('UK', 'United Kingdom');
INSERT INTO COUNTRY VALUES ('US', 'United States');


โครงสร้างและข้อมูลของตาราง COUNTRY

Table : AUDIT

CREATE TABLE [dbo].[AUDIT](
	[AUDIT_ID] [int] NOT NULL,
	[CUSTOMER_ID] [varchar](4) NULL,
	[LOG_DATE] [datetime] NULL,
	[USED] [decimal](18, 2) NULL,
 CONSTRAINT [PK_AUDIT] PRIMARY KEY CLUSTERED 
(
	[AUDIT_ID] ASC
)) ON [PRIMARY]

INSERT INTO AUDIT VALUES (1, 'C001', '01-Aug-2015', 100000);
INSERT INTO AUDIT VALUES (2, 'C001', '05-Aug-2015', 200000);
INSERT INTO AUDIT VALUES (3, 'C001', '10-Aug-2015', 300000);
INSERT INTO AUDIT VALUES (4, 'C002', '02-Aug-2015', 400000);
INSERT INTO AUDIT VALUES (5, 'C002', '07-Aug-2015', 100000);
INSERT INTO AUDIT VALUES (6, 'C002', '15-Aug-2015', 300000);
INSERT INTO AUDIT VALUES (7, 'C003', '20-Aug-2015', 400000);
INSERT INTO AUDIT VALUES (8, 'C003', '25-Aug-2015', 200000);
INSERT INTO AUDIT VALUES (9, 'C004', '04-Jul-2015', 100000);


โครงสร้างและข้อมูลของตาราง AUDIT

 
 


Share

[NEW] ไปแลกเปลี่ยน AFS โครงการนักเรียนแลกเปลี่ยน I อเมริกา แคนาดา จีน ญี่ปุ่น ฝรั่งเศส เยอรมนี ฟินแลนด์ สวิตเซอร์แลนด์ | ef แลกเปลี่ยน – NATAVIGUIDES

“AFS gives me a chance to go on exchange and helps me to prepare a lot of things. When I start my exchange year in my host country, when I have a problem, they help me a lot.”

นางสาวณัฐธิดา ทองทิพย์ นักเรียนเก่าเอเอฟเอส ประเทศชิลี 


EP.39 นักเรียนแลกเปลี่ยนEF Unbox แม่ส่งอะไรมาให้อีก??? รอบ 2!! |sushishii


เรากลับมาแล้วทุกคนนนนนนนนน มีซับไทย!!!ทำนานมาก!!!
IG: https://www.instagram.com/nuttanun_j/
https://www.youtube.com/watch?v=tmCZRcOaY8
Dj Quads It just makes me happy (NonCopyrighted Music)
my sister channel
https://www.youtube.com/channel/UCrVNzxO96g_YeZ1vRj39Chw

นอกจากการดูบทความนี้แล้ว คุณยังสามารถดูข้อมูลที่เป็นประโยชน์อื่นๆ อีกมากมายที่เราให้ไว้ที่นี่: ดูความรู้เพิ่มเติมที่นี่

EP.39 นักเรียนแลกเปลี่ยนEF Unbox แม่ส่งอะไรมาให้อีก??? รอบ 2!! |sushishii

EP.7 นักเรียนแลกเปลี่ยนEF Camp days 10 part 2 and days 11 12ไปOklahoma | sushishii


เรื่องมันยาวถ้ามีเวลาเดี๋ยวจะมาทำวิดิโอเล่าให้ฟังนะ5555

EP.7 นักเรียนแลกเปลี่ยนEF Camp days 10 part 2 and days 11 12ไปOklahoma | sushishii

Q\u0026A มาเรียนอังกฤษชีวิตเป็นยังไง?, หมดเงินไปเท่าไหร่ ฯลฯ | MayyR


ตอบทุกคำถามของการมาเรียนที่อังกฤษฮะ มายังไง หมดเงินไปเท่าไหร่
อายุเท่าไหร่ถึงมาได้ ยากไหม ไม่เก่งภาษาทำไง ปรับตัวยากไหม เหงาไหม สารพัดทุกคำถามอยู่ในนี้แล้ว เชิญชมฮะ ใครสงสัยอะไร ถามทิ้งไว้ได้น้า
เมมากับ GoUni นะฮะ ใครสนใจมาเรียน คอร์สภาษา ม.ปลาย ป.ตรี
ป.โท ลองดูรายละเอียดเพิ่มเติมได้ที่
http://gouni.co.uk/th
Fanpage : https://www.facebook.com/ImMayyrBlog
IG : https://www.instagram.com/mayyr_/

Q\u0026A มาเรียนอังกฤษชีวิตเป็นยังไง?, หมดเงินไปเท่าไหร่ ฯลฯ | MayyR

EP.16 นักเรียนแลกเปลี่ยนEF Homecoming+ทัวร์โรงเรียนมั้ง55555 |sushishii


คือนี่ถ่ายแค่วันเดียวเพราะว่าลืมเอากล้องไปวันที่2อ่ะ55555ถ้าดูเต็มจอไม่ไหวก็ดูแบบจอเล็กได้น้าาาาา ถามได้~~~อันนี้คือพาเรดก็ไม่ได้ไปgloco danceก็ไม่ได้ไปอ่ะ555555
IG: https://www.instagram.com/nuttanun_j/
My sister channel!! https://www.youtube.com/channel/UCrVNzxO96g_YeZ1vRj39Chw

EP.16 นักเรียนแลกเปลี่ยนEF Homecoming+ทัวร์โรงเรียนมั้ง55555 |sushishii

EP.19 นักเรียนแลกเปลี่ยนEF ตอบคำถามที่เหลือ!!! |sushishii


ไม่รู้จะพูดอะไรอ่ะถามได้นะเผื่อมาทำQ\u0026A5555555ถ้าไม่ชอบก็ขอโทษน้าาาาา
IG: https://www.instagram.com/nuttanun_j/
IG: https://www.instagram.com/silenelinn_j/
My sister channel!!https://www.youtube.com/channel/UCrVNzxO96g_YeZ1vRj39Chw

EP.19 นักเรียนแลกเปลี่ยนEF ตอบคำถามที่เหลือ!!! |sushishii

นอกจากการดูบทความนี้แล้ว คุณยังสามารถดูข้อมูลที่เป็นประโยชน์อื่นๆ อีกมากมายที่เราให้ไว้ที่นี่: ดูบทความเพิ่มเติมในหมวดหมู่LEARN FOREIGN LANGUAGE

ขอบคุณมากสำหรับการดูหัวข้อโพสต์ ef แลกเปลี่ยน

Leave a Reply

Your email address will not be published. Required fields are marked *