实例解析继承体系重构及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 *在实际使用环境请用字段名列表代替,以避免可能的数据表字段名重名错误。
首先,分别实现本人的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 *在实际使用环境请用字段名列表代替,以避免可能的数据表字段名重名错误。
相关文章推荐
- 实例解析继承体系重构及ORM映射
- 实例解析继承体系重构及ORM映射
- 实例解析继承体系重构及ORM映射
- [转]ORM中的继承关系映射全解——单表继承体系、一实体一具体表、一实体一扩展表、接口映射
- C# ORM中的继承关系映射全解-接口映射、单表继承体系等
- ORM中的继承关系映射全解——单表继承体系、一实体一具体表、一实体一扩展表、接口映射
- ORM中的继承关系映射全解——单表继承体系、一实体一具体表、一实体一扩展表、接口映射
- ORM中的继承关系映射全解——单表继承体系、一实体一具体表、一实体一扩展表、接口映射
- 实例解析linux内核I2C体系结构(2)
- 实例解析linux内核I2C体系结构
- 实例解析linux内核I2C体系结构(2)
- 实例解析linux内核I2C体系结构(1)
- 实例解析linux内核I2C体系结构(二)
- 实例解析linux内核I2C体系结构
- SSH——Hibernate继承关系映射详解(配置+实例+总结)
- hibernate继承映射[映射单独一个tablexml版本]实例【与19相同,方式不同,未验证】(二十)
- 实例解析linux内核I2C体系结构(2)
- 重构1:梳理并分解混乱的继承体系
- 实例解析linux内核I2C体系结构
- 实例解析linux内核I2C体系结构(2)