У меня есть этот случай, который не может по-настоящему приступить к работе.По сути, у меня есть абстрактный класс User
и расширенные классы Admin
, Teacher
и LabEmployee
.Вот мои сопоставления:
<class name="User" table="users" dynamic-update="true" dynamic-insert="true" select-before-update="false">
<id name="Id">
<column name="id" sql-type="bigint"/>
<generator class="identity"/>
</id>
<discriminator column="user_type" type="String"/>
...
some irrelevant properties (username, password, email etc.)
...
<subclass name="Admin" discriminator-value="ADMIN"/>
<subclass name="LabEmloyee" discriminator-value="LABEMPLOYEE"/>
<subclass name="Teacher" discriminator-value="TEACHER"/>
</class>
Теперь я действительно хотел бы использовать этот Enum
public enum UserType
{
ADMIN, LABEMPLOYEE, TEACHER
}
Я понимаю, что Nhibernate по умолчанию отображает перечисления в целые числа, поэтому ADMIN будет "0", LABEMPLOYEE будет "1", а УЧИТЕЛЬ будет "2".Я попробовал следующий пост:
http://codebetter.com/jefferypalermo/2006/03/14/using-enum-strings-with-nhibernate-persistence-level-400/
... и определил UserTypeWrapper:
public class UserTypeWrapper: NHibernate.Type.EnumStringType
{
public UserTypeWrapper()
: base(typeof(User.UserType))
{
}
}
... но предполагается, что enum не является дискриминатором, чтоЯ не могу установить тип дискриминатора как UserTypeWrapper
, поскольку NHibernate создает MappingException "Не удалось определить тип для: UserTypeWrapper".
Кто-нибудь знает, как этого добиться?
Любая помощь будет принята с благодарностью!Спасибо!