我訪問一個預先存在的數據庫(實際上是IBM i上的DB2),並且在Fluent NHibernate中存在以下(簡單)結構的映射問題。我不得不構建一個人爲的例子,所以請原諒任何遺漏。DB2 Fluent NHibernate在HasMany映射中映射重複記錄
工作...
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; }
}
我試圖映射工作和交付之間的 '的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的結果=會話 .CreateCriteria(typeof運算(作業)) 。新增(Expression.Eq( 「代碼」, 「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);
}
}
那麼,映射是不正確的,還是有一些與我使用它們的方式?
非常感謝,我一直盯着這一整天。
是的,這是有道理的。正如我所說的,CODE被映射爲ID和referenceId是不夠的。缺少真正的唯一ID導致了這個問題。好你讓它爲你工作。享受NHiberante;) –
感謝您的幫助。這一切開始有意義 – Mmarquee
偉大;)真的很棒;) –