2011-12-14 11 views
0

私は3つのカラムを持つエンティティクラスを持っています。 entityType、entityIDおよびEntityTextです。たとえば、エンティティタイプが3(連絡先)で、entityIDが2の場合は、連絡先テーブルに参加し、entityIDで連絡先を取得し、contact.nameプロパティをEntityTextとして設定します。これどうやってするの?複数の条件テーブルからNHibernateを使ってカラムを選択する

詳細: 同じオブジェクトクラスではありません。

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

をprefereうEntityTextの内容の後ろにありますので、更新質問

に一致するようにリファクタリング。これらのマッピングはすべて同じオブジェクトクラスに対応していますか?クラスコードを追加できますか? –

+0

異なるオブジェクトクラスではありません。私はそれを追加しました。 – iboware

答えて

0

EDIT:ロジックは、私はあなたの質問は少し不明である多型

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(); 
+0

ありがとう、しかし彼らは異なる、同じではありません。これらのクラスには継承がありません。私は私の質問に詳細を追加しました。 – iboware

+0

ありがとう、最後のリファクタリングされたコードを試してみます。 – iboware