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