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