2016-04-21 14 views
0

Ich habe eine Klasse, die von vielen anderen Klassen verwiesen wird:Objekt von vielen verwiesen, ohne Eigentum

class Foo 
{ 
    // Some properties 
} 

class Bar 
{ 
    public Foo Foo { get; set; } 
} 

ich diese Beziehung auf das Bar Ende abbilden:

class BarMap : ClassMap<Bar> 
{ 
    public BarMap() 
    { 
     References(b => b.Foo).Cascade.All(); 
    } 
} 

Dies funktioniert, wenn Ich lösche ein Bar Objekt, aber ich bekomme Fremdschlüsselkonflikte, wenn ich versuche, ein Foo Objekt zu löschen. Ich verstehe das, weil NHibernate nicht weiß, dass es Bar s gibt, die sich darauf verlassen, so glücklich versucht, die Foo und nicht die Bar s zu löschen.

Ich weiß, dass ich etwas entlang der Linien von tun können:

class Foo 
{ 
    public IList<Bar> Bars { get; set; } 

    // some properties 
} 

class FooMap : ClassMap<Foo> 
{ 
    public FooMap() 
    { 
     HasMany(f => f.Bars) 
      .Inverse() 
      .Cascade.AllDeleteOrphans(); 
    } 
} 

Gibt es eine Möglichkeit Foo so abzubilden, dass sie weiß um die inverse viele-zu-eins-Beziehung ohne eine Eigenschaft zu Foo hinzufügen? Ich möchte nicht wirklich eine Sammlung zu Foo für jeden Objekttyp hinzufügen, der darauf verweist.

Antwort

1

Ich denke, ich habe Ihr Ziel richtig verstanden, und ich fürchte die Antwort ist, dass Sie das nicht so leicht tun können.

Sie können versuchen, IInterceptor or event kombiniert mit einigen Analysen des Metamodells NHibernate hat von Ihrem Mapping generiert (siehe ISessionFactory.GetAllClassMetadata), aber dies würde wahrscheinlich eine Menge Arbeitsstunden erfordern.