您的位置:首页 > 其它

实例解析继承体系重构及ORM映射

2006-08-16 16:16 429 查看
本文以双鱼座同学的再说继承关系一文中提到的一组三元继承关联关系为基础。

首先,分别实现本人的ORM中的继承关系映射全解一文中提到的三种实体继承体系到关系数据库的映射方案实例。

接着,使用接口分离以上继承体系中的实体类中的相同概念,对该继承体系进行重构,并同样给出对重构后的继承体系的三种到关系数据库的映射方案实例。

全部实例代码基于NBear的接口式实体定义方式实现。

1. 背景

首先,给出双鱼座同学原文中的三元继承关联关系的等价接口定义。见下图1:

[Table(IsView = true)]
public interface PrivilegeOwner : IEntity

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

[Table("AllInOne", AdditionalInsert = "FilterMark = 1", AdditionalWhere = "FilterMark = 1")]
public interface LocalUser : User

[Table("AllInOne", AdditionalInsert = "FilterMark = 2", AdditionalWhere = "FilterMark = 2")]
public interface AgentUser : User

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

[Table("AllInOne", AdditionalInsert = "FilterMark = 21", AdditionalWhere = "FilterMark = 21")]
public interface UserGroup : PrivilegeOwner
[Table("PrivilegeOwner")]
public interface PrivilegeOwner : IEntity

[Table("User")]
public interface User : PrivilegeOwner

[Table("LocalUser")]
public interface LocalUser : User

[Table("AgentUser")]
public interface AgentUser : User

[Table("GhostUser")]
public interface GhostUser : User

[Table("UserGroup")]
public interface UserGroup : PrivilegeOwner
[Table("PrivilegeOwner")]
public interface PrivilegeOwnerExtended : IEntity

[Table("PrivilegeOwner", IsView=true)]
public interface PrivilegeOwner : PrivilegeOwnerExtended

[Table("User")]
public interface UserExtended : IEntity

[Table("select * from User inner join PrivilegeOwner on PrivilegeOwner.Id = User.Id", IsView=true)]
public interface User : UserExtended, PrivilegeOwnerExtended

[Table("LocalUser")]
public interface LocalUserExtended : IEntity

[Table("select * from LocalUser inner join User on User.Id = LocalUser.Id inner join PrivilegeOwner on PrivilegeOwner.Id = LocalUser.Id", IsView=true)]
public interface LocalUser : LocalUserExtended, User

[Table("AgentUser")]
public interface AgentUserExtended : IEntity

[Table("select * from AgentUser inner join User on User.Id = AgentUser.Id inner join PrivilegeOwner on PrivilegeOwner.Id = AgentUser.Id", IsView = true)]
public interface AgentUser : AgentUserExtended, User

[Table("GhostUser")]
public interface GhostUserExtended : IEntity

[Table("select * from GhostUser inner join User on User.Id = GhostUser.Id inner join PrivilegeOwner on PrivilegeOwner.Id = GhostUser.Id", IsView=true)]
public interface GhostUser : GhostUserExtended, User

[Table("UserGroup")]
public interface UserGroupExtended : IEntity

[Table("select * from UserGroup inner join PrivilegeOwner on PrivilegeOwner.Id = UserGroup.Id", IsView=true)]
public interface UserGroup : UserGroupExtended, PrivilegeOwner
[Table(IsView=true)]
public interface IdentableEntity : IEntity

[Table(IsView=true)]
public interface Loginable : IEntity

[Table(IsView=true)]
public interface PasswordLoginable : Loginable

[Table(IsView = true)]
public interface PrivilegeAssignable

[Table("AllInOne", AdditionalWhere = "FilterMark <= 20", IsView = true)]
public interface User : IdentableEntity, PrivilegeAssignable

[Table("AllInOne", AdditionalInsert = "FilterMark = 1", AdditionalWhere = "FilterMark = 1")]
public interface LocalUser : User, PasswordLoginable

[Table("AllInOne", AdditionalInsert="FilterMark = 2", AdditionalWhere="FilterMark = 2")]
public interface AgentUser : User, Loginable

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

[Table("AllInOne", AdditionalInsert = "FilterMark = 21", AdditionalWhere = "FilterMark = 21")]
public interface UserGroup : IdentableEntity, PrivilegeAssignable
[Table(IsView=true)]
public interface IdentableEntity : IEntity

[Table(IsView=true)]
public interface Loginable : IEntity

[Table(IsView=true)]
public interface PasswordLoginable : Loginable

[Table(IsView = true)]
public interface PrivilegeAssignable

[Table("User")]
public interface User : IdentableEntity, PrivilegeAssignable

[Table("LocalUser")]
public interface LocalUser : User, PasswordLoginable

[Table("AgentUser")]
public interface AgentUser : User, Loginable

[Table("GhostUser")]
public interface GhostUser : User

[Table("UserGroup")]
public interface UserGroup : IdentableEntity, PrivilegeAssignable
[Table(IsView=true)]
public interface IdentableEntity : IEntity

[Table(IsView=true)]
public interface Loginable : IEntity

[Table(IsView=true)]
public interface PasswordLoginable : Loginable

[Table(IsView = true)]
public interface PrivilegeAssignable

[Table("User")]
public interface UserExtended : IdentableEntity, PrivilegeAssignable

[Table("User", IsView=true)]
public interface User : UserExtended

[Table("LocalUser")]
public interface LocalUserExtended : PasswordLoginable

[Table("select * from LocalUser inner join User on LocalUser.Id = User.Id", IsView=true)]
public interface LocalUser : LocalUserExtended, User

[Table("AgentUser")]
public interface AgentUserExtended : Loginable

[Table("select * from AgentUser inner join User on AgentUser.Id = User.Id", IsView = true)]
public interface AgentUser : AgentUserExtended, User

[Table("GhostUser")]
public interface GhostUserExtended : IEntity

[Table("select * from GhostUser inner join User on GhostUser.Id = User.Id", IsView = true)]
public interface GhostUser : GhostUserExtended, User

[Table("UserGroup")]
public interface UserGroupExtended : IdentableEntity, PrivilegeAssignable

[Table("UserGroup", IsView=true)]
public interface UserGroup : UserGroupExtended
}

5. 使用映射的实体

对于以上各种方案定义的实体,我们都可以使用NBear.Data.Gateway和NBear.Data.ActiveEntity类进行查询和更新。详细信息请参考NBear中文用户手册

另外,注意,所有代码示例中的select *在实际使用环境请用字段名列表代替,以避免可能的数据表字段名重名错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: