Pregunta

Estoy intentando asignar a poco como una relación de muchos a muchos. No quiero una propiedad en el comportamiento que contiene BehavioralEvents. Estoy bastante seguro de que muchos-a-muchos mapeo tiene que estar en ambos lugares, sin embargo, no quiero la propiedad correspondiente en mi clase de comportamiento.

He oído puede utilizar un operador de acceso no-op pero no estoy seguro de cómo hacerlo en Fluido Nhibernate.

Por favor consejo:

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

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

comportamiento de la clase (de nuevo referencia a No 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); 
    }
}
¿Fue útil?

Solución

No es necesario hacer un mapa de ambos lados.

Tengo varias asignaciones de la siguiente manera:

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

funciona como un encanto! Asignarla como colección o un conjunto (ver http://www.codinginstinct.com/2010/03/nhibernate-tip-use-set-for-many-to-many.html ).

Otros consejos

Si no necesita de comportamiento, entonces no añadir en la cartografía. Si necesita y no quieren poner a continuación, utilizar la operación Cascade.None ()

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top