2010-04-19 6 views
3

В проекте, который я работаю, у меня есть следующие объекты: аналитик, Client и Подрядчик. Каждый наследует от базового класса Пользователь.NHibernate отображения для подклассов и состыкованных подклассов

public abstract class User { 
    public virtual int Id { get; set; } 
    public virtual string Username { get; set; } 
    public virtual string FullName { get; set; } 
} 

Я тогда другие классы Наследование от базового класса, как:

public class Analyst : User { 
    // Empty class. There are no additional properties for an analyst. 
} 

public class Client : User { 
    // Empty class. There are no additional properties for a client. 
} 

public class Contractor : User { 
    public int TotalJobs { get; set; } 
    public int JobsInProgress { get; set; } 
} 

Для вышеуказанных классов, у меня есть следующие структуры таблицы:

USER 
---- 
UserId 
Username 
FullName 
UserType (1 = Analyst, 2 = Client, 3 = Contractor) 


CONTRACTOR 
---------- 
UserId 
TotalJobs 
JobsInProgress 

Там нет таблиц для классов Analyst и Client.

Я хотел бы знать, как я могу написать файл сопоставления NHibernate для класса Contractor. Для других классов я создал файл сопоставления пользователя и добавил «Клиент и аналитик» в качестве подклассов. Как я могу сопоставить класс Подрядчика?

ответ

2

Это идеально подходит для подхода, описанного в 8.1.4. Mixing table per class hierarchy with table per subclass

<subclass name="Contractor" discriminator-value=3> 
    <join table="CONTRACTOR"> 
    <key column="UserId"/> 
    <property name="TotalJobs"/> 
    <property name="JobsInProgress"/> 
    </join> 
</subclass> 
+0

Отлично! Это сделал трюк. –

Смежные вопросы