我访问了一个预先存在的数据库(实际上是 IBM i 上的 DB2),并且在 Fluent NHibernate 中对以下(简单)结构的映射存在问题。我不得不构建一个人为的例子,所以请原谅任何遗漏。
工作 ...
public class Job
{
public virtual string JobCode { get; set; }
public virtual string Owner{ get; set; }
public virtual IList<Deliverable> Deliverables { get; set; }
public Job()
{
Deliverables = new List<Deliverable>();
}
}
可交付..
public class Deliverable
{
public virtual string JobCode { get; set; }
public virtual int Package { get; set; }
public virtual string Owner { get; set; }
public virtual string Reference { get; set; }
public virtual Job Job { get; set; }
}
我正在尝试映射 Job 和 Deliverable 之间的“HasMany”关系,如下所示..
public class JobMap : ClassMap<Job>
{
public JobMap()
{
Table("JOB");
Id(x => x.JobCode).Column("CODE");
Map(x => x.Owner).Column("WHODO");
HasMany(x => x.Deliverables)
.KeyColumn("CODE");
}
}
public class DeliverableMap : ClassMap<Deliverable>
{
public DeliverableMap()
{
Table("DELIVERABLE");
Id(x => x.JobCode).Column("CODE");
Map(x => x.Reference).Column("UNQREF");
Map(x => x.Owner).Column("WHODO");
References( x => x.Job)
.Column("CODE") ;
}
}
这似乎可行,如果您使用生成的 SQL 并直接运行它,则会返回正确的结果(在本例中为 11 条记录,所有记录都是唯一的)。但是,当我执行以下操作时,可交付成果列表中有 11 个完全相同的条目。
IList 结果 = session .CreateCriteria(typeof(Job)) .Add(Expression.Eq("Code", "206171")) .List();
foreach (var job in results)
{
Console.WriteLine("job.JobCode" + job.JobCode);
Console.WriteLine("job.Owner" + job.Owner);
foreach (var deliverable in job.Deliverables)
{
**// These are all identical!**
Console.WriteLine(deliverable.Reference);
Console.WriteLine("deliverable.Owner" + deliverable.Owner);
Console.WriteLine(deliverable.JobNumber);
Console.WriteLine(deliverable.DeliverableTyoe);
Console.WriteLine(deliverable.Description);
}
}
那么,映射是否不正确,或者我使用它们的方式有什么问题?
非常感谢,我整天都在盯着这个。