2012-12-05 5 views
0

J'ai 3 classes:Courant NHibernate One to One Save

public class WorkEntity 
{ 
    public virtual int WorkId { get; set; } 
    public virtual OrderExtensionEntity OrderExtension { get; set; } 
} 

public class OrderExtensionEntity 
{ 
    public virtual int Id { get; set; } 
    public virtual WorkEntity Work { get; set; } 
    public virtual IList<IssueInformation> Issues { get; set; } 
} 

public class IssueInformationEntity 
{ 
    public virtual int Id { get; set; } 
    public virtual long WorkId { get; set; } 
} 

Ils sont mis en correspondance:

public class WorkMap : ClassMap<WorkEntity> 
{ 
    public WorkMap() 
    { 
     Id(x => x.WorkId).Column("ID_ZLECENIE").GeneratedBy.Sequence("SEQ_TAE_ZLECENIE"); 
     HasOne(x => x.OrderExtension).Constrained(); 
    } 
} 

public class OrderExtensionMap : ClassMap<OrderExtensionEntity> 
{ 
    public OrderExtensionMap() 
    { 
     LazyLoad(); 

     Id(x => x.Id).Column("ID_ZLECENIE").GeneratedBy.Foreign("Work"); 
     HasMany(x => x.IssueInformation).KeyColumn("FK_ZLECENIE"); 
    } 
} 

public class IssueInformationMap : ClassMap<IssueInformationEntity> 
{ 
    public IssueInformationMap() 
    { 
     Id(x => x.Id).Column("ID_ZAD_ROZ_ADRES").GeneratedBy.Sequence("SEQ_ZAD_ROZ_ADRES"); 

     Map(x => x.WorkId).Column("FK_ZLECENIE").Not.Nullable(); 
    } 
} 

Lorsque je crée des enregistrements sur la base de données (Oracle) Je peux obtenir toutes les informations des tables . Mais je ne peux pas enregistrer OrderExtensionEntity en utilisant:

var orderExtension = new OrderExtension(); 
orderExtension._some_variables_like_strings_to_be_saved_ 

Session.SaveOrUpdate(orderExtension) 

Il me dit « propriété Unresolved travail » et une autre erreur si je tente de faire:

orderExtension.Work = new WorkEntity() { WorkId = 12345 }; 

Répondre

0

Essayez cette application. C'est ainsi que mes relations individuelles ressemblent.

public class WorkMap : ClassMap<WorkEntity> 
{ 
    public WorkMap() 
    { 
     Id(x => x.WorkId).Column("ID_ZLECENIE").GeneratedBy.Sequence("SEQ_TAE_ZLECENIE"); 
     HasOne(x => x.OrderExtension) 
      .Cascade.All(); 
    } 
} 

public class OrderExtensionMap : ClassMap<OrderExtensionEntity> 
{ 
    public OrderExtensionMap() 
    { 
     LazyLoad(); 

     Id(x => x.Id).Column("ID_ZLECENIE").GeneratedBy.Foreign("Work"); 
     HasOne(x => x.Work).Constrained(); 
     HasMany(x => x.IssueInformation).KeyColumn("FK_ZLECENIE"); 
    } 
} 
+0

Nope. Il lance "La transaction sous laquelle cet appel de méthode était en cours d'exécution a été annulée de manière asynchrone". Peut-être que je change de One-to-One à One-To-Many et l'utilise comme One? –

+0

Eh bien, je ne suis pas sûr de comprendre votre exemple ci-dessus. Il semble que vous essayez de sauvegarder une OrderExtension par elle-même. Une OrderExtension ne peut pas exister sans un objet Work. Si ce n'est pas votre intention, le mappage est incorrect. Je pense que vous liez votre nouvel objet OrderExtension à un nouvel objet Work ou à un objet Work persistant et enregistrez l'objet Work. –

+0

De plus, l'erreur que vous venez d'indiquer ci-dessus "La transaction ..." ne semble pas être un problème de mappage. –