2017-12-07 37 views
0

Ich bin eine Person und eine Todesbescheinigung modellieren, wo eine Person keine oder eine Todesbescheinigung haben kann. Wenn ich habe:nHibernate Null oder eins zu eins mit Mapping von Code

public class Person 
{ 
    public string PersonId { get; set; } 
    public virtual DeathCertificate { get; set; } 
} 

und:

public class DeathCertificate 
{ 
    public string DeathCertificateId { get; set; } 
    public string PersonId { get; set; } 
    public virtual Person { get; set; } 
} 

Wo DeathCertificateId den Primärschlüssel DeathCertificate in der Datenbank ist.

Mit dem folgenden in der Abbildung für die Person:

this.OneToOne(
    entity => entity.DeathCertificate, 
    mapper => 
    { 
     mapper.Access(Accessor.Property); 
     mapper.Cascade(Cascade.Detach | Cascade.Persist); 
     mapper.PropertyReference(p => p.Person); 
     mapper.Constrained(false); 
    }); 

Und dies für die Sterbeurkunde:

this.ManyToOne(
    entity => entity.Person, 
    mapper => 
    { 
     mapper.Column("PERSON_ID"); 
     mapper.Cascade(Cascade.None); 
     mapper.Unique(true); 
    }); 

Leider erzeugt diese SQL ähnlich der folgenden, wenn ich Person abfragen, ob ich Join es in oder nicht:

select ... 
from person p 
left outer join deathcertificate dc 
    on dc.person_id = p.person_id 
where p.person_id = 'ABC123' 

So funktioniert alles, aber ich will nur ein Sterbeurkunde, wenn ich explizit beitreten.

Ich denke, ich habe etwas falsch in meinen Mappings. Kann jemand helfen?

Antwort

Verwandte Themen