พัฒนา Project ด้วย Castle Active Record

โดยปกติที่เราพัฒนา Application หรือระบบที่เป็นลักษณ์ของ Object-Oriented นั้นจะต้องออกแบบโครงสร้างฐานข้อมูล (ER-Diagram) และนำโครงสร้างนั้นๆ ไป Implement เป็น Class ที่ใช้ติดต่อหรือจัดการฐานข้อมูลอีกทีนึงวิธีการนี้เรียกว่า Object Data Access สามารถทำได้หลายวิธี เช่น “Native” “ADO.NET DataSet“ “ORM/Mapping”  และ ฯลฯ ทุกๆ วิธีมีข้อดูข้อเสียแตกต่างกันขึ้นอยู่กับว่างานของเรานั้นเหมาะสมกับตัวใดมากกว่ากัน

 

Castle Active Record กำหนดขึ้นมาจากแนวคิดว่าที่ว่า 1 แถวในฐานข้อมูลถือเป็นหนึ่ง Object แนวคิดนี้เรียกว่า Active Record Pattern ซึ่ง Martin Fowler เจ้าพ่อแห่ง Design Pattern เป็นผู้ให้คำนิยามนี้ไว้

 

เริ่มต้นพัฒนาโปรแกรมโดยใช้ Castle Active Record

1.       เปิด Visual Studio.NET 2008 ที่ Install Add-in ActiveWriter

2.       เริ่มต้นสร้าง Project โดยกด File -> New Project…

3.       หน้าจอ Dialog New Project ด้านซ้าย Project Type เลือก Visual C# -> Web




4.       Templates: ด้านขวา เลือก .NET Framework 3.5 และ และเลือก ASP.NET Web Application

5.       Name ด้านล่างตั้งชื่อ Project (ในที่นี้ตั้งว่า WebApplicationActiveRecord) กด OK

6.       จะได้ Solution ที่มีไฟล์ทั้งหมดดังนี้



7.       เริ่มเพิ่ม Diagram ของ ActiveRecord โดยใช้ ActiveWriter โดยคลิกขวาที่ Project เลือก Add -> New Item..




8.       ที่ Dialog Add New Item – WebApplicationActiveRecord เลือก ActiveWriter แล้วกด OK




9.       จากนั้นจะมีไฟล์ Diagram ของ ActiveWriter1.actiw เพิ่มขึ้นจากนั้นคลิกเปิดไฟล์เพื่อเปิด Diagram




10.    ได้หน้าจอ Diagram เปิดขึ้นที่ส่วนของ Editor




11.    เพิ่ม Class จาก Toolbox ด้านซ้าย โดยการลาก Tool [Class] จากด้านซ้ายมาววางที่ Editor จะได้ Class ที่มีชือว่า ModelClass1 จากนั้นนำมาเปลี่ยนชื่อ Class ตามที่ต้องการ




12.    ทำการเปลี่ยนชื่อจาก ModelClass1 ไปเป็น Student โดยการ คลิกที่ ModelClass1 จากนั้นกด F2 เพื่อ Rename




13.    ทำการเพิ่ม Property ใส่ Class ตามที่ต้องการโดยการคลิกขวาที่ Properties




14.    ได้ Property ที่ว่า ModelProperty1 เปลี่ยนชื่อตามที่ต้องการ เช่น StudentId




15.    รูปตัวอย่างการเพิ่ม Property ตามที่ต้องการใช้ทั้งหมด




16.    สร้าง Primary Key ใน Class เพื่อให้ Class สามารถในไปใช้กับฐานข้อมูลได้ โดยคลิกขวาที่ Property ที่ต้องการทำ Primary Key แล้วเลือก Properties ในที่นี้ใช้ StudentId เป็น Primary Key


17.    ที่ Tab Properties หัวข้อ ActiveRecord Primary Key ของ Class StudentId แก้ไข Generator จาก Native ให้เป็น Assigned กับ Key Type ให้เป็น Primary Key


18.    หลังจากนั้นลอง Compile จะเกิด Error ขึ้นเพราะว่าเราไม่ได้ Reference ของ Castle

19.    Add Reference ไฟล์ Library ที่จำเป็นสำหรับ ActiveRecord

20.    คลิกขวาที่ Icon Reference… เลือก Add Reference…




21.    ที่ Dialog Add Reference เลือก Castle.ActiveRecord.dll Castle.Core.dll NHibernate.ByteCode.LinFu.dll แล้วกด OK


22.    จากนั้น Config Library เพื่อให้ Project สามารถใช้งาน ActiveRecord ใน Project นี้จะ Config ที่ไฟล์ Global.asax (คือไฟล์ที่ Project จะเริ่มรันครั้งแรกตอนที่ Project เริ่มทำงาน) โดยคลิกขวาที่ Project เลือก Add -> New Item…


23.    Dialog Add New Item เลือก Global Application Class กด Add




24.    ที่ Method Application_Start ให้ใส่ Text Config ดังนี้

Dictionary<string, string> properties = new Dictionary<string, string>();

 

// SQLite config

properties.Add("connection.driver_class", "NHibernate.Driver.SQLite20Driver");

properties.Add("dialect", "NHibernate.Dialect.SQLiteDialect");

properties.Add("connection.provider", "NHibernate.Connection.DriverConnectionProvider");

properties.Add("connection.connection_string", "Data Source=|DataDirectory|\\default.db3;Version=3;");

properties.Add("proxyfactory.factory_class", "NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu");

 

InPlaceConfigurationSource source = new InPlaceConfigurationSource();

source.Add(typeof(ActiveRecordBase), properties);

ActiveRecordStarter.Initialize(source,

typeof(Student) // นำ Class ที่อยู่ใน ActiveWriter มาลงทะเบียนเพื่อให้ ActiveRecord สามารถนำ Class นั้นๆไปใช้ต่อได้

);

 

// สั่งให้ Create Table ในฐานข้อมูล

ActiveRecordStarter.CreateSchema();


25.    ทำการ Using System.Collection.Generic, Castle.ActiveRecord.Framework.Config, Castle.ActiveRecord เพิ่มเพื่อให้สามารถใช้งานได้

using System.Collections.Generic;

using Castle.ActiveRecord.Framework.Config;

using Castle.ActiveRecord;

 


26.    เท่านี้ Project ก็สามารถใช้ ActiveRecord ในการทำ ORM ได้แล้วครับ


สำหรับ Project นี้ใช้ SQLite เป็นฐานข้อมูลจึงต้อง Add Reference ของ SQLite เพิ่มเติมหากคุณใช้ฐานข้อมูลตัวใดก็ Config ให้ตรงกับฐานข้อมูลที่ใช้ พร้อมกับ Add Reference Library ของฐานข้อมูลนั้นๆเข้ามาใน Project

27.    คลิกขวา Add Reference



28.    เลือก System.Data.SQLite.DLL กด OK



ต่อไปเรามาใช้งาน Class ที่เกิดจาก ActiveWriter

29.    คลิกขวาที่ไฟล์ Default.aspx เลือก ViewCode เพิ่มโค้ดดังนี้ที่ Method Page_Load

Student s = new Student();

s.StudentId = "1";

s.FirstName = "jee";

s.LastName = "pae";

s.Age = "15";

s.Create();

Response.Write(s.FirstName);


30.    เสร็จแล้วกด Run เพื่อทดสอบ Project จะได้ผลลัพท์ดังนี้


Hits: 1973