【发布时间】:2011-11-17 19:54:51
【问题描述】:
我需要以这样一个事实作为开头,即在谈到 nhibernate 时我是一个完全的新手,而且我不知道我不知道什么。
我有一个这样的用户类:
public class nhMembershipUser : MembershipUser
{
public new virtual Guid ProviderUserKey { get; set; }
public new virtual DateTime LastPasswordChangedDate { get; set; }
public virtual bool IsEnabled { get; set; }
protected internal virtual byte[] Password { get; set; }
protected internal virtual string Salt { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual string Application { get; set; }
public new virtual string UserName { get; set; }
public override bool IsOnline
{
get
{
var UnitOfWork = new nhUnitOfWork();
return UnitOfWork.UserIsOnline(this);
}
}
public new virtual bool IsLockedOut { get; set; }
public virtual IList<nhRole> Roles { get; set; }
}
... 以及像这样的流畅映射类:
public class nhMembershipUserMap : ClassMap<nhMembershipUser>
{
public nhMembershipUserMap()
{
Table("Users");
Id(x => x.ProviderUserKey).Column("UserID");
Map(x => x.Comment).Nullable().Length(10000);
Map(x => x.CreationDate).CustomType<UtcDateTimeType>().Not.Nullable();
Map(x => x.Email).Not.Nullable().Length(250);
Map(x => x.IsApproved).Default("1");
Map(x => x.IsLockedOut).Default("0");
Map(x => x.LastActivityDate).Nullable();
Map(x => x.LastLockoutDate).Nullable();
Map(x => x.LastLoginDate).Nullable();
Map(x => x.LastPasswordChangedDate).Nullable();
Map(x => x.PasswordQuestion).Nullable().Length(250);
Map(x => x.ProviderName).Default("").Not.Nullable().Length(250);
Map(x => x.UserName).Not.Nullable().Length(250);
Map(x => x.IsEnabled).Default("1").Not.Nullable();
Map(Reveal.Member<nhMembershipUser>("Password")).Length(260).Nullable();
Map(Reveal.Member<nhMembershipUser>("Salt")).Length(250).Nullable();
Map(x => x.FirstName).Length(35).Not.Nullable();
Map(x => x.LastName).Length(35).Not.Nullable();
Map(x => x.Application).Length(250).Not.Nullable();
HasManyToMany(x => x.Roles).ChildKeyColumn("RoleId").ParentKeyColumn("UserId").Cascade.All().Table("UsersToRoles");
}
}
这可以构建,但是我当然不能在类之外获取或设置 Salt 或 Password 属性,这是伪造的。我试图保持我的用户类轻量级和 POCO-ish,并将加盐和散列功能构建到我的会员提供程序中;我真的不希望公众可以访问,但我希望我的提供者类可以。显而易见的答案是使用内部访问修饰符,但是当我在没有受保护的修饰符的情况下这样做时,NH 会对我大吼大叫,这违背了目的。
如何让我的程序集中的另一个类访问这些受限属性并保存到 NHibernate?看起来这应该很容易做到。
【问题讨论】:
-
您是哪个大会的“会员提供者”?和 nhMembershipUser 一样吗?
-
是的。相同的组件,但 NH 的受保护修饰符要求严重限制了我的风格。
标签: nhibernate fluent-nhibernate