我希望实现人与车之间的一对多关系,并对人和车都进行CRUD操作。简短的CRUD和关系:
更新
person
有许多cars
是否可以通过ORM,特别是NHibernate?
如下课程:
public class PersonSet
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual ISet<CarSet> Cars { get; set; }
}
public class CarSet
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual PersonSet Person { get; set; }
}
映射如下所示:
public class PersonSetMap : ClassMapping<PersonSet>
{
public PersonSetMap()
{
Id(x => x.Id, m=>m.Generator(Generators.Identity));
Property(x=>x.Name);
Set(x => x.Cars, c =>
{
//c.Key(k =>
// {
// k.Column("PersonId");
// });
c.Cascade(Cascade.All);
c.Lazy(CollectionLazy.NoLazy);
// c.Inverse(true);
}
, r =>
{
r.OneToMany();
}
);
}
}
public class CarSetMap : ClassMapping<CarSet>
{
public CarSetMap()
{
Id(x => x.Id, m => m.Generator(Generators.Identity));
Property(x => x.Name);
ManyToOne(x => x.Person, m =>
{
m.Column("PersonId");
m.Cascade(Cascade.None);
m.NotNullable(true);
});
}
}
我遇到的问题是,如果我更新一辆车并尝试将其保存在人物上,它就不会改变。
更新
我想找出,如果有可能,以及上面我的映射错误。任何关于xml版本或Loquacious的想法也将受到赞赏。
表PersonId
上应该有Car
个外键。
答案 0 :(得分:1)
我不知道这是否能解决您的问题,但在ManyToOne映射中,应在列级应用Unique和NotNullable方法。
ManyToOne(x => x.Person, m =>
{
m.Column(c =>
{
c.Name("PersonId");
c.NotNullable(true);
});
m.Cascade(Cascade.None);
});