Welcome 微信登录

首页 / 网页编程 / ASP.NET / 实例解析继承体系重构及ORM映射

实例解析继承体系重构及ORM映射2010-05-20 cnblogs.com teddyma Teddy"s Know本文以双鱼座同学的再说继承关系一文中提到的一组三元继承关联关系为基础。

首先,分别实现本人的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; }
}