只是要清楚 - 这个问题不是关于Fluent NHibernate。
我有一个Parent
和Child
个类,它们之间有一对多的关系。
为了便于阅读,缩短了代码。
public class Child
{
int Id;
string Name;
}
public class Parent
{
int Id;
string Name;
Iesi.Collections.Generic.ISet<Child> Children;
}
public ChildMapping()
{
Table("Children");
Id(p => p.Id, m => {
m.Column("Id");
m.Generator(Generators.Identity);
});
Property(p => p.Name, m => {
m.Column("Name");
m.NotNullable(true);
});
}
public ParentMapping()
{
Table("Parents");
Id(p => p.Id, m => {
m.Column("Id");
m.Generator(Generators.Identity);
});
Property(p => p.Name, m => {
m.Column("Name");
m.NotNullable(true);
});
Set(p => p.Children, m => {
m.Cascade(Cascade.All | Cascade.DeleteOrphans);
m.Key(k => {
k.Column("ParentId");
k.NotNullable(true);
});
}, a => a.OneToMany());
}
Child
类需要Parent
属性。
Parent
需要控制关系(我无法在Inverse
的结尾设置true
到Parent
。
Parent
和Child
映射应该如何?
答案 0 :(得分:2)
我添加了以下项目:
子类:字段_parent,构造函数
父类:AddChild方法
子映射:父母属性的多个人
父映射:使用反向(true)来生成子代的父处理程序
完整代码:
public class Child
{
int Id;
string Name;
Parent _parent;
public Child(Parent parent)
{
_parent = parent;
}
}
public class Parent
{
int Id;
string Name;
Iesi.Collections.Generic.ISet<Child> Children;
public virtual Child AddChild()
{
Child newChild = new Child(this); //link parent to child via constructor
Children.Add(newChild); //add child to parent's collection
return newChild; //return child for direct usage
}
}
public ChildMapping()
{
Table("Children");
Id(p => p.Id, m => {
m.Column("Id");
m.Generator(Generators.Identity);
});
Property(p => p.Name, m => {
m.Column("Name");
m.NotNullable(true);
});
ManyToOne(x => x.Parent, map => {
map.Column("Id"); /* id of the parent table */
map.Access(Accessor.Field);
map.NotNullable(true);
map.Class(typeof(Parent));
});
}
public ParentMapping()
{
Table("Parents");
Id(p => p.Id, m => {
m.Column("Id");
m.Generator(Generators.Identity);
});
Property(p => p.Name, m => {
m.Column("Name");
m.NotNullable(true);
});
Set(p => p.Children, m => {
m.Cascade(Cascade.All | Cascade.DeleteOrphans);
m.Key(k => {
k.Column("Id"); /* id of the child table */
k.NotNullable(true);
k.Inverse(true); /* makes the parent handle it's childlist */
});
}, a => a.OneToMany());
}
应该有用。