我需要使用Fluent NHibernate在数据库上保留这个类:
public class RaccoonCity
{
public virtual int Id { get; private set; }
public virtual DateTime InfectionStart { get; private set; }
private IList<Zombie> _zombies = new List<Zombie>();
public virtual IEnumerable<Zombie> Zombies
{
get { return _zombies; }
}
protected RaccoonCity()
{}
public RaccoonCity(DateTime startMonth)
{
InfectionStart = startMonth;
}
public virtual void AddZombie(Zombie z)
{
_zombies.Add(z);
}
}
该属性具有IEnumerable类型,表示您不应该使用它来插入新项目。支持字段是IList,可以很容易地从自己的类中插入新项目。
Zombie是一个简单的课程:
public class Zombie
{
public virtual int Id { get; private set; }
public virtual string FormerName { get; set; }
public virtual DateTime Infected { get; set; }
}
地图如下:
public class RaccoonCityMap: ClassMap<RaccoonCity>
{
public RaccoonCityMap()
{
Id(x => x.Id);
Map(x => x.InfectionStart);
HasMany(x => x.Zombies)
.Access.CamelCaseField(Prefix.Underscore)
.Inverse()
.Cascade.All();
}
}
当我测试它时,数据被插入数据库,但是僵尸的外键是空的,并且RaccoonCity实例在Zombies列表中没有项目。
答案 0 :(得分:0)
我必须实现这个方法 HasManyComponent就是我自己 在实际的行李箱中失踪了 框架。也就是说,事实并非如此 可以映射一组价值 对象。但它并没有那么难 因为源码基础非常好。 我的变化可能会被整合 很快进入框架。
这一个:
答案 1 :(得分:0)
您将关系声明为Inverse
,这意味着Zombie
而不是RacoonCity
负责维护关系。
将相应的引用添加到zombie并在AddZombie
方法上设置,或者删除Inverse
(在这种情况下,您将看到一个带有空FK的INSERT,然后是更新)
建议阅读:http://nhibernate.info/doc/nh/en/index.html#collections-onetomany