기존 데이터베이스 (실제로 IBM i의 DB2)에 액세스하고 Fluent NHibernate에서 다음 (단순) 구조에 대한 매핑에 문제가 있습니다. 나는 인공적인 예를 만들어야 만 했으므로 어떤 죄목도 용서할 수 있습니다.DB2 Fluent HasMany 매핑에서 중복 레코드를 매핑하는 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; }
}
나는 다음과 같이 작업과 산출물 사이에 '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 (작업)) .Add (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);
}
}
그래서 매핑이 잘못 되었나요? 아니면 내가 사용하고있는 방식으로 뭔가가 있습니까?
미리 감사드립니다. 나는 하루 종일 이것을보고있었습니다. (우리의 경우에 Delivarable
및 Job
)
예, 의미가 있습니다. 앞에서 말했듯이 ID로 매핑되고 referenceId로 매핑 된 CODE만으로는 충분하지 않습니다. 실제 고유 ID가 누락되어 문제가 발생했습니다. 좋은 당신이 그것을 당신을 위해 일하게하십시오. Enjoy NHiberante;) –
도움을 주셔서 감사합니다. 그것은 모두 감각을 만들기 시작합니다 – Mmarquee
위대한;) 정말 대단한;) –