首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Castle ActiveRecord 繼承映射:JoinedBase 與 JoinedKey 實戰

     編輯:關於.NET

資料庫設計

採用「表巢結構」:基類對應主表 Users,子類對應從表 Employees,共享主鍵 ID。

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
);

實體類別定義

基類 User

[ActiveRecord("Users"), JoinedBase]
public class User : ActiveRecordBase
{
    [PrimaryKey(PrimaryKeyType.Identity, "ID")]
    public int ID { get; set; }

    [Property("LoginName")]
    public string Name { get; set; }

    [Property("Password")]
    public string Password { get; set; }
}

[JoinedBase] 標記此為繼承層級的根實體。

子類 Employee

[ActiveRecord("Employees")]
public class Employee : User
{
    [JoinedKey("ID")]  // 取代 PrimaryKey,指向共享主鍵
    public int EID { get; set; }

    [Property]
    public decimal Salary { get; set; }
}

[JoinedKey("ID")] 告知 AR 此屬性對應從表的主鍵,同時也是外鍵關聯回 Users。

儲存子類實例

ActiveRecordStarter.Initialize(source, typeof(Employee), typeof(User));

using (var scope = new TransactionScope())
{
    var emp = new Employee
    {
        Name = "jailu",
        Password = "123456789",
        Salary = 1000
    };
    emp.Save();  // 會同時寫入 Users 與 Employees
    scope.VoteCommit();
}

此模式適用於「是一種」關係且子類擁有獨有欄位的場景,避免單表繼承的稀疏欄位問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved