自我引用表

时间:2010-05-23 16:35:58

标签: nhibernate

所以我是NHibernate的新手并且遇到了问题。也许有人可以帮助我。 给定具有许多属性的User-class:

public class User
{
    public virtual Int64 Id { get; private set; }
    public virtual string Firstname { get; set; }
    public virtual string Lastname { get; set; }
    public virtual string Username { get; set; }
    public virtual string Email { get; set; }
    ...
    public virtual string Comment { get; set; }
    public virtual UserInfo LastModifiedBy { get; set; }
}

这里有一些表的DDL:

CREATE TABLE USERS  
(  
    "ID" BIGINT NOT NULL ,   
    "FIRSTNAME" VARCHAR(50) NOT NULL ,   
    "LASTNAME" VARCHAR(50) NOT NULL ,   
    "USERNAME" VARCHAR(128) NOT NULL ,   
    "EMAIL" VARCHAR(128) NOT NULL ,   
    ...  
    "LASTMODIFIEDBY" BIGINT NOT NULL ,   
) IN "USERSPACE1" ; 

数据库表格字段'LASTMODIFIEDBY'用于审计目的,来自在插入或更新时执行的用户的Id。这通常是管理员。 因为UI不显示这个Int64而是管理员名称(模式如'Lastname,Firstname')我需要通过自引用表USERS来检索这些值。接下来,User的类型的整个对象对于不需要的字段的数量来说是过度的。因此,有一个类UserInfo,占用空间小得多。

public class UserInfo
{
    public Int64 Id { get; set; }
    public string Firstname { get; set; }
    public string Lastname { get; set; }
    public string FullnameReverse
    {
        get { return string.Format("{0}, {1}", Lastname ?? string.Empty, Firstname ?? string.Empty); }
    }
}

所以这里开始问题。实际上我不知道如何完成这项任务。我不确定我是否也必须为类UserInfo提供映射,而不仅仅是类User。我想在User-class的映射中将类UserInfo作为Composite-element进行集成。但我不知道如何定义USERS.ID和USERS.LASTMODIFIEDBY表字段之间的映射。 希望我能够清楚地描述我的问题以获得一些提示。非常感谢!

1 个答案:

答案 0 :(得分:1)

这看起来像是一个不好的情况或过早的优化。

如果您将LastModifiedBy定义为User并使用<many-to-one>进行映射,是否确实存在任何性能问题?

那应该是你的起点。