使用NHibernate从多个条件表中选择列

使用NHibernate从多个条件表中选择列,nhibernate,Nhibernate,我有一个实体类,它有3列;entityType、entityID和EntityText。我想从3个条件表中填充entityText列。例如:如果entity type为3contact,entityID为2,则它将连接到Contacts表,并按entityID获取contact,并将contact.name属性设置为entityText。我该怎么做 详情: 不同的对象类 Contact { contactID firstName lastName .. } Company { companyID

我有一个实体类,它有3列;entityType、entityID和EntityText。我想从3个条件表中填充entityText列。例如:如果entity type为3contact,entityID为2,则它将连接到Contacts表,并按entityID获取contact,并将contact.name属性设置为entityText。我该怎么做

详情: 不同的对象类

Contact
{
contactID
firstName
lastName
..
}
Company
{
companyID
name
address
...
}
 Task{
taskID
entityID
entityType
entityText= Company.name or Contact.firstName + Contact.lastName
...
}

编辑:重构以匹配更新的问题

因为EntityText的内容背后有逻辑,所以我更喜欢多态性

public abstract class Task
{
    public virtual int Id { get; set; }
    public abstract string Text { get; set; }
}

public class ContactTask : Task
{
    public virtual Contact Contact { get; set; }
    public override string Text
    {
        get { return Contact.FirstName + " " + Contact.LastName; }
        set { Contact.FirstName = value.Split(' ')[0]; Contact.LastName = value.Split(' ')[1]; }
    }
}
public class CompanyTask : Task
{
    public virtual Company Company { get; set; }
    public override string Text
    {
        get { return Company.Name; }
        set { Company.Name = value; }
    }
}

public class TaskMap : ClassMap<Task>
{
    public TaskMap()
    {
        Table("TaskTable");

        Id(c => c.Id, "taskID").GeneratedBy....();
        DiscriminateSubclassesOn("entityType");
    }
}

public class ContactTaskMap : ClassMap<ContactTask>
{
    public ContactTaskMap()
    {
        DiscriminatorValue(3);
        References(ct => ct.Contact, "entityID");
    }
}

public class CompanyTaskMap : ClassMap<CompanyTask>
{
    public ContactTaskMap()
    {
        DiscriminatorValue(2);
        References(ct => ct.Company, "entityID");
    }
}

// get all tasks
var all = session.QueryOver<Task>().List();

// get all tasks for Company
var companyTasks = session.QueryOver<CompanyTask>().List();

你的问题有点不清楚。所有这些映射是否都指向同一对象类?你能添加你的类代码吗?不同的对象类,它们是不同的。我已经加了。谢谢,但是它们不同,不一样。这些类没有继承性。我在问题中增加了细节。