使用Fluent NHibernate映射与相应属性具有不同类型的支持字段

使用Fluent NHibernate映射与相应属性具有不同类型的支持字段,nhibernate,fluent-nhibernate,nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,我需要使用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>();

我需要使用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);
    }

}
地图如下:

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();
    }
}
公共类浣熊地图:类地图
{
公共浣熊图()
{
Id(x=>x.Id);
Map(x=>x.InfectionStart);
HasMany(x=>x.Zombies)
.Access.CamelCaseField(前缀.下划线)
.Inverse()
.Cascade.All();
}
}
当我测试这个时,数据被插入到数据库中,但是僵尸的外键是空的,racooncity实例在僵尸列表中没有任何项目。

找到了一篇关于它的帖子:

我必须实现这个方法 从那以后,我自己就有了许多组件 在汽车的后备箱里不见了 框架就是不是, 可以映射值的集合 物体。但这并不难 因为源代码库非常好。 我的更改可能会被整合 很快就进入框架

还有这个:


您将关系声明为
反向
,这意味着
僵尸
而非
RacoonCity
负责维护关系

要么添加对应的zombie引用并在
AddZombie
方法上设置它,要么删除
Inverse
(在这种情况下,您将看到一个带有空FK的插入,后面是一个更新)


建议阅读:

谢谢!“反转”对我来说不是很清楚。我认为对自己负责的班级是班级本身。而“反向”则把这个责任推到了其他阶级的肩上……没错。我同意命名法不是最直观的,但它起源于最初的JavaHibernate。
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();
    }
}