Я хочу быть в состоянии сделать следующее:Fluent NHibernate отображения, сохраняющие в обоих направлениях
var child = new Child {
Name = "foo",
Parent = new Parent { Name = "bar" }
};
session.Save(child);
ИЛИ
var parent = new Parent {
Name = "foo",
Children = new List<Child> {
new Child { Name = "bar" },
new Child { Name = "baz" },
},
};
session.Save(parent);
и иметь его в обоих случаях сохранить все созданные объекты когда вызывается Save()
. Вот классы. Я не знаю, как сделать сопоставление отношения один ко многим между Parent
и Child
, что облегчит сохранение всех созданных объектов за один звонок до Save()
. Я ожидаю, что можно использовать любую версию, но только один будет использоваться в любой момент времени. Обоснование этого заключается в том, что я создаю сборщики тестовых данных, и в некоторых случаях будет проще подключить его со стороны Child
, а в других случаях будет легче подключаться к стороне Parent
. Поэтому я хочу иметь возможность каскадировать вставки и удаления в обоих направлениях, заданных любым объектом. Меня не интересуют обновления. Это будет использоваться только для вставки данных, выполнения моих тестов против приложения, а затем удаления данных.
Вот классы, участвующие:
public class Child {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Parent Parent { get; set; }
}
public class Parent {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual IEnumerable<Child> Children { get; set; }
}
public ChildMap : ClassMap<Child> {
public ChildMap() {
Id(x => x.Id);
Map(x => x.Name);
// How should I set this up?
Reference(x => x.Parent);
}
}
public ParentMap : ClassMap<Parent> {
public ParentMap() {
Id(x => x.Id);
Map(x => x.Name);
// How should I set this up ?
HasMany(x => x.Children);
}
}
это лучше сделать сбор детей только для чтения и использовать синтаксис инициализации: 'новые Родительские {Дети = { new Child {Name = "bar"}, new Child {Name = "baz"}, }}; '. – Firo
@ Фиро вы могли бы превратить это в полный ответ? –
Лучше всего это делать (особенно с ORM), но это не отвечает на вопрос. ИМО Радим Кёлер дал хороший и полный ответ. – Firo