我正在尝试将POCO映射为多对多关系。我不希望包含BehavioralEvents的行为属性。我很确定多对多映射必须在两个地方,但我不想在我的Behavior类上有相应的属性。
我听说你可以使用无操作访问操作符,但我不知道如何在Fluent Nhibernate中进行操作。
请告知:
public class BehavioralEvent : AggregateRoot
{
protected internal IList<Behavior> Behaviors { get; private set; }
public BehavioralEvent()
{
Behaviors = new List<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);
}
}
答案 0 :(得分: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)。
答案 1 :(得分:0)
如果您不需要来自行为,则不要添加映射。 如果您需要并且不想放置操作,请使用Cascade.None()