Castle ActiveRecord 是建構於 NHibernate 之上的輕量 ORM 框架,以 .NET 屬性取代傳統 .hbm.xml 映射檔,讓持久化類別定義更簡潔直觀。
CREATE TABLE Users (
ID INT IDENTITY(1,1) PRIMARY KEY,
LoginName VARCHAR(50) NOT NULL,
Password VARCHAR(20) NOT NULL
);
[ActiveRecord("Users")]
public class User : ActiveRecordBase
{
[PrimaryKey(PrimaryKeyType.Identity, "ID")]
public int Id { get; set; }
[Property("LoginName")]
public string Name { get; set; }
[Property]
public string Password { get; set; }
// 靜態輔助方法
public static User Find(int id) => (User)FindByPrimaryKey(typeof(User), id);
public static IList FindAll() => FindAll(typeof(User));
public static void DeleteAll() => DeleteAll(typeof(User));
}
<configSections>
<section name="activerecord"
type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord" />
</configSections>
<activerecord>
<config>
<add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
<add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
<add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
<add key="hibernate.connection.connection_string"
value="Data Source=.;Initial Catalog=Castle;User ID=sa;Password=123456" />
</config>
</activerecord>
// 初始化(應用程式啟動時一次)
IConfigurationSource src = ConfigurationManager.GetSection("activerecord") as IConfigurationSource;
ActiveRecordStarter.Initialize(src, typeof(User));
// Create
new User { Name = "jailu", Password = "123456789" }.Create();
// Read
var u = User.Find(1);
Console.WriteLine($"{u.Name} / {u.Password}");
// Update
u.Name = "EmmaLee";
u.Update();
// Delete
u.Delete();
掌握此基礎流程,即可快速建立資料存取層,後續再擴展關聯映射、查詢物件等進階功能。