程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 實例解析繼承體系重構及ORM映射

實例解析繼承體系重構及ORM映射

編輯:關於ASP.NET

本文以雙魚座同學的再說繼承關系一文中提到的一組三元繼承關聯關系為基礎。

首先,分別實現本人的ORM中的繼承關系映射全解一文中提到的三種實體繼承體系到關系數據庫的映射方案實例。

接著,使用接口分離以上繼承體系中的實體類中的相同概念,對該繼承體系進行重構,並同樣給出對重構後的繼承體系的三種到關系數據庫的映射方案實例。

全部實例代碼基於NBear的接口式實體定義方式實現。

1. 背景

首先,給出雙魚座同學原文中的三元繼承關聯關系的等價接口定義。見下圖1:

2. 對圖1-1的ORM映射

2.1 單表繼承體系

采用單表繼承體系映射時,我們用一個AllInOne表包含所有實體的所有字段,並用一個FilterMark過濾標志,區分該條紀錄的類型,注意只有所有的User,包括抽象的User和所有的UserGroup是可以查詢的,其余接口僅僅用於概念抽象。

代碼1

[Table(IsView = true)]
public interface PrivilegeOwner : IEntity
{
[PrimaryKey]
int Id { get; }
string Name { get; set; }
}

[Table("AllInOne", AdditionalWhere = "FilterMark <= 20", IsView = true)]
public interface User : PrivilegeOwner
{
}

[Table("AllInOne", AdditionalInsert = "FilterMark = 1", AdditionalWhere = "FilterMark = 1")]
public interface LocalUser : User
{
string LoginId { get; set; }
string Password { get; set; }
}

[Table("AllInOne", AdditionalInsert = "FilterMark = 2", AdditionalWhere = "FilterMark = 2")]
public interface AgentUser : User
{
string LoginId { get; set; }
}

[Table("AllInOne", AdditionalInsert = "FilterMark = 3", AdditionalWhere = "FilterMark = 3")]
public interface GhostUser : User
{
}

[Table("AllInOne", AdditionalInsert = "FilterMark = 21", AdditionalWhere = "FilterMark = 21")]
public interface UserGroup : PrivilegeOwner
{
string Comment { get; set; }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved