0

我目前正在开发 ASP.NET MVC 应用程序,其中我有一个User如下实体:

public class User
{
    public virtual int Id { get; protected set; }
    public virtual string Name { get; protected set; }
    public virtual string Role { get; protected set; }
    public virtual Location Location { get; protected set; }
}

位置同样简单:

public class Location
{
    public virtual string Id { get; protected set; }
    public virtual string Building { get; protected set; }
    public virtual string City { get; protected set; }
    public virtual string Region { get; protected set; }
}

我的复杂性出现了,因为我想User从 Active Directory 而不是数据库中填充。此外,一些持久化到数据库的类引用用户作为属性。我有一个ADUserRepository用于检索的,但是当其余的由 NHibernate 管理时,我不知道如何将这些用户集成到我的对象图中。

NHibernate 有没有办法只保留一个 idUser而不是用户表的外键?我可以将它映射为一个组件来完成这个吗?我还研究过实施IUserType翻译。这样,它将映射到一个简单的字段,并ADUserRepository可以放入链中以解析存储的 Id。还是我试图破解一些不太可行的东西?这是我第一次使用 NHibernate,因此我很感激您提供的任何见解或解决方案。谢谢。

更新

看来我最好的解决方案是使用 IUserType 映射用户并注入(最好使用 StructureMap)一个服务,以便在返回之前填充对象。在这种情况下,这里有几个问题涉及该主题,主要表明需要自定义 ByteCodeProvider。为了让 IUserType 采用参数化构造函数,我仍然需要这样做还是在此处进行注释:NHibernate.ByteCode.LinFu.dll For NHibernate 3.2有所作为?

4

1 回答 1

0

使用 Usertype 将用户转换为 id 并返回

public class SomeClass
{
    public virtual string Id { get; protected set; }
    public virtual User User { get; protected set; }
}

// in FluentMapping (you have to translate if you want to use mapping by code)

public SomeClassMap()
{
    Map(x => x.User).Column("user_id").CustomType<UserType>();
}

public class UserType : IUserType
{
    void NullSafeSet(...)
    {
        NHibernateUtil.Int32.NullSafeSet(cmd, ((User)value).Id, index);
    }
    void NullSafeGet(...)
    {
        int id = (int)NHibernateUtil.Int32.NullSafeGet(cmd, ((User)value).Id, index);
        var userrepository = GetItFromSomeWhere();
        return userrepository.FindById(id);
    }
}
于 2012-06-08T07:06:54.143 回答