我有一个User
表定义如下:
CREATE TABLE Users(
UserId int IDENTITY(1,1) NOT NULL,
UserName varchar(128) NOT NULL,
Name nvarchar(200) NOT NULL,
Password binary(64) NOT NULL,
PasswordSalt binary(16) NOT NULL
)
我正在尝试将两个类映射到此表:
User
的对象没有Password和PasswordSalt属性。SecurityUser
,继承自User
并定义了Password和PasswordSalt属性。这背后的想法是SecurityUser
是一个内部对象,需要中间服务来修改密码。这是为了避免每次我需要查询用户时都返回密码和盐。
我称之为User
类是一个不提供任何用户敏感信息的安全对象。
现在,我已经定义了两张地图:
public class UserMap : ClassMap<User>
{
protected UserMap()
{
Id(x => x.Id);
Map(x => x.UserName);
Map(x => x.Name);
}
}
和
public class SecurityUserMap : SubclassMap<SecurityUser>
{
protected SecurityUserMap()
{
Map(x => x.Password);
Map(x => x.PasswordSalt);
Table("Users");
}
}
问题是nHibernate创建了一个名为SecurityUser
的表。我尝试使用Table("Users")
函数指定相同的表,但我得到了无效的nhibernate映射。
我怎样才能实现我想做的事情?或者是否有另一种方法?
答案 0 :(得分:1)
NHibernate不知道何时保存用户以及何时保存安全用户。当记录是用户时,以及当它是安全用户时,您需要在数据库中告诉NHibernate。 为了告诉你如何做到这一点,我需要知道为什么“这需要避免每次我需要查询用户时都返回密码和盐。”?当原因是表现时,你可能无法衡量差异。如果您使用User类进行报告方案,则可以更好地使用投影类来选择报告查询的结果,而不是映射的实体。