Nhibernate 映射子集合而不基于数据库主键编制索引或使用bag
我试图在Fluent Nhibernate中映射现有的亲子关系: [RatingCollection]->[Rating] 评级收集包括: ID数据库生成的ID 密码 名称 评级有: ID数据库生成的ID 评级集合ID 密码 名称 我一直在试图弄清楚HasMany的哪个排列在这里有意义。我现在所拥有的: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
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应该作为一个单独的对象映射。