2

我正在使用 Nhibernate 3.2,以及与 NH 3.2 兼容的 FluentNhibernate 构建,我已经开始映射我系统的遗留部分。我相信可以做我需要的事情,但需要一些帮助才能正确映射它。

我在下面有一个用户类,带有应用程序列表。

public class User 
{
    public virtual string UserID { get; set; }
    public virtual int Id { get; set; }
    public virtual IList<Application> Applications { get; set; }
}

我还有一个应用程序类,它有一个返回用户类的外键,它不是“主键”。见下文

public class Application 
{
    // Not sure if this 'User' is needed?
    public virtual User User { get; set; }
    public virtual int IdFromUserTable { get; set; }
    public virtual string ApplicationName { get; set; }

}

我有相应的 ClassMap,我认为 UserMap 是问题所在

用户地图

public class UserMap : ClassMap<User>
{
    public UserMap()
    {
        Id(x => x.UserID);
        HasMany(x => x.Applications)
            .AsBag()
            .KeyColumn("UserID")
            .PropertyRef("Id")
            .LazyLoad()
            .Inverse();
        Table("usertable");
        ReadOnly();
    }
}

应用地图

public class ApplicationMap : ClassMap<Application>
{
    public ApplicationMap()
    {
        CompositeId()
            .KeyProperty(x => x.ApplicationName)
            .KeyProperty(x => x.IdFromUserTable, "UserID");   
        Table("applicationstable");
    }
}

表结构如下:

用户表

Primary Key - string, ColumnName = UserID
int (Identity) - int, ColumnName = Id

应用表

Composite Key - string, ColumnName = ApplicationName
and
int, ColumnName = UserId (references Id column in user table)

我的问题是如何让映射适用于上述场景。

一个警告是:我不能改变数据库的结构,但我可以改变类/类映射

非常感谢任何帮助..

PS - 我确实通过在 HasMany userMap 中添加 Fetch.Join 来实现这一点,但我更愿意在需要时懒惰地评估应用程序列表

谢谢,马克

4

0 回答 0