2010-07-17 19 views
1

我需要坚持使用功能NHibernate数据库这个类:映射支持字段,将距相应的属性不同的类型,使用功能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,可以很容易地从自己的类中插入新项目。

僵尸是一个简单的类:

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(); 
    } 
} 

当我测试,数据插入数据库,但zombie's外键空,并且RaccoonCity实例在僵尸列表上没有任何项目。

回答

0

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

要么添加相应的参考僵尸,并将其设置在AddZombie方法,或删除Inverse(在这种情况下,你会看到一个空FK的插入物,随后的更新)。

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

+0

谢谢! “倒置”对我来说不是很清楚。我认为负责坚持自己的班级本身就是班级。而“逆向”将这种责任放在其他职业肩上... – Seiti 2010-07-19 03:21:03

+0

正是。我同意命名不是最直观的,但它的根源在于原始的Java Hibernate。 – 2010-07-19 14:10:04

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

相关问题