流畅的nhibernate map hasmany using propertyref without fetch.join

时间:2011-08-24 14:31:55

标签: c# nhibernate fluent-nhibernate fluent-nhibernate-mapping

我正在使用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; }
}

我还有一个Application类,它有一个返回User Class的外键,而不是“主键”。见下文

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; }

}

我有相应的ClassMaps,我认为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();
    }
}

ApplicationMap

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来实现这一点,但我更愿意在需要时懒惰地评估应用程序列表

谢谢,Mark

0 个答案:

没有答案