0

POCO を多対多の関係としてマッピングしようとしています。BehavioralEvents を含む Behavior のプロパティは必要ありません。多対多のマッピングは両方の場所にある必要があると確信していますが、Behavior クラスに対応するプロパティは必要ありません。

no-op アクセス演算子を使用できると聞きましたが、Fluent Nhibernate でそれを行う方法がわかりません。

お知らせ下さい:

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

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

Behavior クラス (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); 
    }
}
4

2 に答える 2

1

両側からマッピングする必要はありません。

私はこのようなさまざまなマッピングを持っています:

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

チャームのように機能します!コレクションまたはセットとしてマップします(http://www.codinginstinct.com/2010/03/nhibernate-tip-use-set-for-many-to-many.htmlを参照)。

于 2010-11-17T16:57:38.413 に答える
0

from Behavior が必要ない場合は、マッピングに追加しないでください。操作を行う必要があり、入れたくない場合は、 Cascade.None() を使用してください

于 2013-07-15T10:06:48.710 に答える