Свободно владеет nhibernate hasmanymomany обе стороны с картой NOOP
-
25-09-2019 - |
Вопрос
Я пытаюсь сопоставить попко как отношение многих ко многим. Я не хочу недвижимости по поведению, которое содержит поведения. Я уверен, что сопоставление многих для многих должно быть в обоих местах, однако я не хочу соответствующий недвижимость на моем классе поведения.
Я слышал, что вы можете использовать оператор доступа NO-OP, но я не уверен, как это сделать в свободном отношении Nibernate.
Пожалуйста, порекомендуйте:
public class BehavioralEvent : AggregateRoot
{
protected internal IList<Behavior> Behaviors { get; private set; }
public BehavioralEvent()
{
Behaviors = new List<Behavior>();
}
}
Класс поведения (без справки обратно к поведению)
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(){}
}
Поведения поведения:
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");
}
}
Поведения поведения:
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);
}
}
Решение
Вам не нужно отображать его с обеих сторон.
У меня есть разные отображения, как это:
HasManyToMany(x => x.SomeCollection).Table("MappingTable").ParentKeyColumn("ParentKey").ChildKeyColumn("ChildKey").Cascade.AllDeleteOrphan();
Работает как шарм! Карта ее как коллекция или набор (см. http://www.codinginstink.com/2010/03/nibernate-tip-use-set-for-many-to-many.html.).
Другие советы
Если вам не нужно поведения, то не добавьте в сопоставление. Если вам нужно, и не хочу вкладывать операцию, то используйте cascade.none ()