Nhibernate 映射子集合而不基于数据库主键编制索引或使用bag

Nhibernate 映射子集合而不基于数据库主键编制索引或使用bag,nhibernate,mapping,Nhibernate,Mapping,我试图在Fluent Nhibernate中映射现有的亲子关系: [RatingCollection]->[Rating] 评级收集包括: ID数据库生成的ID 密码 名称 评级有: ID数据库生成的ID 评级集合ID 密码 名称 我一直在试图弄清楚HasMany的哪个排列在这里有意义。我现在所拥有的: HasMany<Rating>(x => x.Ratings) .WithTableName("Rating") .KeyColumnNames.Add("Ra

我试图在Fluent Nhibernate中映射现有的亲子关系:

[RatingCollection]->[Rating]

评级收集包括:

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,该ID目前在六位数范围内


关于如何获得一个从零开始的索引集合,以便转到entity.Ratings[0].Name=foo,这样我就可以在持久化时修改集合,而无需删除/重新插入所有内容?

首先,您使用的是旧版本的Fluent NHibernate;WithTableName已被弃用,取而代之的是Table

IList可以通过索引访问,因此包应该可以工作。我不知道你为什么将评级映射为一个组件,或者这会产生什么影响。这是一个标准的集合映射:

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

对这个版本的理解很好-我以为它已经升级到1.0 RTM了,但看起来不是。那么,您是否建议将基础类型的映射移动到单独的映射类,而不是作为组件?在实际的数据库中,描述列名是Rating_Description,我没有在示例中显示它,因为我认为它是不相关的。是的,Rating应该作为一个单独的对象映射。