本文主要介紹了如何使用Castle.ActiveRecord來處理繼承關系。
本文涉及兩個實體類:基類(User)、子類(Employee)。以下是類圖:

本文主要內容:
1.編寫數據庫腳本
2.JoinedBase和JoinedKey屬性說明
3.編寫實體類
4.編寫調用代碼
一、編寫數據庫腳本
其實本文涉及的數據表在前面的筆記中都出現過!
Create Table Users ( ID int identity(1,1) primary key, LoginName Varchar(50) not null, Password Varchar(20) not null ) Create Table Employees ( ID int primary key, Salary money )
二、JoinedBase和JoinedKey屬性說明
JoinedBase屬性:該屬性是ActiveRecord屬性子屬性,用於基類中;
JoinedKey性性:該屬性用在子類中,用於代替PrimaryKey的位置;
三、編寫實體類
基類:User.cs /**////jailusd@hotmail.com
///2006-09-24
using System;
using System.Collections.Generic;
using System.Text;
using Castle.ActiveRecord;
namespace Inherit
{
[ActiveRecord("Users"),JoinedBase] //JoinedBase
public class User : ActiveRecordBase
{
private int intID;
private string strUserName;
private string strUserPsd;
public User()
{
intID = 0;
strUserName = string.Empty;
strUserPsd = string.Empty;
}
[PrimaryKey(PrimaryKeyType.Identity,"ID")]
public int ID
{
get
{
return intID;
}
set
{
intID = value;
}
}
/**//// <summary>
/// 用戶名
/// </summary>
[Property("LoginName")]
public string Name
{
get
{
return strUserName;
}
set
{
strUserName = value;
}
}
/**//// <summary>
/// 用戶密碼
/// </summary>
[Property("Password")]
public string Password
{
get
{
return strUserPsd;
}
set
{
strUserPsd = value;
}
}
}
}
子類:Employee.cs /**////jailusd@hotmail.com
///2006-09-24
using System;
using System.Collections.Generic;
using System.Text;
using Castle.ActiveRecord;
namespace Inherit
{
[ActiveRecord("Employees")]
public class Employee : User
{
private int intEID;
private decimal decimalSalary;
public Employee()
{
intEID = 0;
decimalSalary = 0;
}
[JoinedKey("ID")] //JoinedKey代替PrimaryKey的位置
public int EID
{
get
{
return intEID;
}
set
{
intEID = value;
}
}
/**//// <summary>
/// 薪水
/// </summary>
[Property]
public decimal Salary
{
get
{
return decimalSalary;
}
set
{
decimalSalary = value;
}
}
}
}
四、編寫調用代碼(只列出添加Employee的代碼)
private void button2_Click(object sender, EventArgs e)
{
IConfigurationSource source = System.Configuration.ConfigurationManager.GetSection("activerecord") as IConfigurationSource;
ActiveRecordStarter.Initialize(source, typeof(Inherit.Employee), typeof(Inherit.User));
//使用事務處理
using (TransactionScope tran = new TransactionScope())
{
Inherit.Employee objEmployee = new Inherit.Employee();
objEmployee.Name = "jailu";
objEmployee.Password = "123456789";
objEmployee.Salary = 1000;
objEmployee.Save();
}
}