Frage

Ich versuche, eine POCO als viele-zu-viele-Beziehung zu kartieren. Ich will nicht eine Eigenschaft auf Verhalten, das BehavioralEvents enthält. Ich bin ziemlich sicher, dass das Many-to-Many-Mapping hat in beiden Orten sein, aber ich habe nicht die entsprechende Eigenschaft auf meinem Verhalten Klasse will.

Ich habe gehört, dass Sie einen no-op-Zugriffsoperator verwenden können, aber im nicht sicher, wie es in Fluent NHibernate zu tun.

Bitte raten:

public class BehavioralEvent : AggregateRoot    
    {       
        protected internal IList<Behavior> Behaviors { get; private set; }

        public BehavioralEvent()
        {
            Behaviors = new List<Behavior>();
        }
    }

Verhaltensklasse (Kein Rückgriff auf BehavioralEvent)

public class Behavior : AggregateRoot
{
        protected internal virtual string Name { get; private set; }
        protected internal virtual string Definition { get; private set; }           

        public Behavior(string name, Guid id) 
        {
            this.Id = id;
            this.Name = name;               
        }

        protected Behavior(){}          
    }

BehavioralEventClassMap:

public class BehavioralEventClassMap : ClassMap<BehavioralEvent>
    {
        public BehavioralEventClassMap()
        {
            Id(x => x.Id, "BehavioralEventId").GeneratedBy.Assigned();

            HasManyToMany(x => x.Behaviors)
                .Cascade.All()
                .Table("BehaviorData")
                .ParentKeyColumn("BehavioralEventId")
                .ChildKeyColumn("BehaviorId");
        }
    }

BehaviorClassMap:

public class BehaviorClassMap : ClassMap<Behavior>
{
    public BehaviorClassMap()
    {
        Table("Behaviors");
        Id(x => x.Id, "BehaviorId").GeneratedBy.Assigned();
        Map(x => x.Name).Not.Nullable();
        Map(x => x.Definition); 
    }
}
War es hilfreich?

Lösung

Sie müssen nicht von beiden Seiten abzubilden.

Ich habe verschiedene Zuordnungen wie folgt aus:

HasManyToMany(x => x.SomeCollection).Table("MappingTable").ParentKeyColumn("ParentKey").ChildKeyColumn("ChildKey").Cascade.AllDeleteOrphan();

Arbeiten wie ein Charme! Wo es als Sammlung oder Set (siehe http://www.codinginstinct.com/2010/03/nhibernate-tip-use-set-for-many-to-many.html ).

Andere Tipps

Wenn Sie von Verhalten nicht brauchen, fügen Sie dann nicht in Abbildung. Wenn Sie brauchen und wollen nicht, den Betrieb setzen dann verwenden Cascade.None ()

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top