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

时间:2010-07-17 03:23:06

标签: 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>();

    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列表中没有项目。

2 个答案:

答案 0 :(得分:0)

找到关于它的帖子:https://web.archive.org/web/20090831052429/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/08/15/a-fluent-interface-to-nhibernate-part-3-mapping.aspx

  

我必须实现这个方法   HasManyComponent就是我自己   在实际的行李箱中失踪了   框架。也就是说,事实并非如此   可以映射一组价值   对象。但它并没有那么难   因为源码基础非常好。   我的变化可能会被整合   很快进入框架。

这一个:

http://nhforge.org/blogs/nhibernate/archive/2008/09/06/a-fluent-interface-to-nhibernate-part-3-mapping-relations.aspx

答案 1 :(得分:0)

您将关系声明为Inverse,这意味着Zombie而不是RacoonCity负责维护关系。

将相应的引用添加到zombie并在AddZombie方法上设置,或者删除Inverse(在这种情况下,您将看到一个带有空FK的INSERT,然后是更新)

建议阅读:http://nhibernate.info/doc/nh/en/index.html#collections-onetomany