映射子集合而不基于数据库主键或使用包进行索引

时间:2010-03-11 16:25:26

标签: nhibernate mapping

我有一个现有的父子关系,我试图在Fluent Nhibernate中映射:

[RatingCollection] - > [评价]

评级收集:

  • ID(数据库生成的ID)
  • 名称

评级有:

  • ID(数据库生成的ID)
  • 评分集合ID
  • 名称

我一直试图弄清楚HasMany的哪种排列在这里有意义。我现在拥有的:

HasMany<Rating>(x => x.Ratings)
    .WithTableName("Rating")
    .KeyColumnNames.Add("RatingCollectionId")
    .Component(c => { c.Map(x => x.Code);
                      c.Map(x => x.Name); );

它可以从CRUD角度运行,但因为它是一个包,所以当我尝试对Ratings属性进行简单的更新/插入时,它最终会删除评级内容。我想要的是一个索引集合,但没有使用数据库生成的ID(现在是六位数范围)。

关于如何获得从零开始的索引集合的任何想法(所以我可以去实体.Ratings [0] .Name =“foo”)这将允许我修改集合而不删除/重新插入所有持久化?

1 个答案:

答案 0 :(得分:0)

首先,您使用的是旧版本的Fluent NHibernate;已弃用WithTableName,转而使用Table

可以通过索引访问IList,以便Bag可以正常工作。我不确定为什么你把评级作为一个组件映射或者它的影响是什么。这是一个标准的集合映射:

HasMany(x => x.Ratings).KeyColumn("RatingCollectionId")
    .Cascade.AllDeleteOrphan().Inverse()
    .AsBag().LazyLoad();