fluent nhibernate将组件映射到引用

fluent nhibernate将组件映射到引用,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,这有可能吗 MessageMap() { Id(x => x.Id); HasMany(x => x.Folders) .Component(c => { c.Map(x => x.Name); c.Refer

这有可能吗

MessageMap()
{
    Id(x => x.Id);    
    HasMany(x => x.Folders)
                    .Component(c =>
                               {
                                   c.Map(x => x.Name);
                                   c.References(x => x.User);
                               })
                    .Cascade.AllDeleteOrphan()
                    .Access.AsCamelCaseField(Prefix.Underscore);
}

public class Message
{
    public virtual int Id {get; protected set;}
    public virtual ICollection<Folder> Folders{get; protected set;}
}

public class Folder
{
    public virtual string Name{get;set;}
    public virtual User User{get;set;}
}
MessageMap()
{
Id(x=>x.Id);
有许多(x=>x.Folders)
.组件(c=>
{
c、 Map(x=>x.Name);
c、 参考文献(x=>x.User);
})
.Cascade.alldelete孤儿()
.Access.AsCamelCaseField(前缀.下划线);
}
公共类消息
{
公共虚拟整数Id{get;protected set;}
公共虚拟ICollection文件夹{get;protected set;}
}
公共类文件夹
{
公共虚拟字符串名称{get;set;}
公共虚拟用户用户{get;set;}
}
通过上面的映射,我得到以下异常

System.IndexOutOfRangeException: Index was outside the bounds of the array.
[IndexOutOfRangeException: Index was outside the bounds of the array.]
   NHibernate.Mapping.Column.set_Name(String value) +80
   NHibernate.Cfg.XmlHbmBinding.ClassBinder.BindColumns(XmlNode node, SimpleValue model, Boolean isNullable, Boolean autoColumn, String propertyPath) +626
   NHibernate.Cfg.XmlHbmBinding.ClassBinder.BindManyToOne(XmlNode node, ManyToOne model, String defaultColumnName, Boolean isNullable) +33
   NHibernate.Cfg.XmlHbmBinding.ClassBinder.BindComponent(XmlNode node, Component model, Type reflectedClass, String className, String path, Boolean isNullable) +987
   NHibernate.Cfg.XmlHbmBinding.CollectionBinder.BindCollectionSecondPass(XmlNode node, Collection model, IDictionary`2 persistentClasses) +1659
   NHibernate.Cfg.XmlHbmBinding.<>c__DisplayClassd.<AddCollectionSecondPass>b__c(IDictionary`2 persistentClasses) +33
   NHibernate.Cfg.Configuration.SecondPassCompile() +118
   NHibernate.Cfg.Configuration.GenerateDropSchemaScript(Dialect dialect) +44
   NHibernate.Tool.hbm2ddl.SchemaExport..ctor(Configuration cfg, IDictionary`2 connectionProperties) +53
   NHibernate.Tool.hbm2ddl.SchemaExport..ctor(Configuration cfg) +9
System.IndexOutOfRangeException:索引超出了数组的边界。
[IndexOutOfRangeException:索引超出了数组的边界。]
NHibernate.Mapping.Column.set_Name(字符串值)+80
NHibernate.Cfg.XmlHbmBinding.ClassBinder.BindColumns(XmlNode节点,SimpleValue模型,布尔值为空,布尔值自动列,字符串属性路径)+626
NHibernate.Cfg.XmlHbmBinding.ClassBinder.bindmanytone(XmlNode节点,manytone模型,字符串defaultColumnName,布尔值为Nullable)+33
NHibernate.Cfg.XmlHbmBinding.ClassBinder.BindComponent(XmlNode节点,组件模型,类型reflectedClass,字符串类名,字符串路径,布尔值为空)+987
NHibernate.Cfg.XmlHbmBinding.CollectionBinder.BindCollectionSecondPass(XmlNode节点,集合模型,IDictionary`2个PersistentClass)+1659
NHibernate.Cfg.XmlHbmBinding.c__显示类d.b__c(IDictionary`2 persistentClass)+33
NHibernate.Cfg.Configuration.SecondPassCompile()+118
NHibernate.Cfg.Configuration.GenerateDropSchemaScript(方言)+44
NHibernate.Tool.hbm2ddl.SchemaExport..ctor(配置cfg,IDictionary`2 connectionProperties)+53
NHibernate.Tool.hbm2ddl.SchemaExport..ctor(配置cfg)+9

我认为应该在文件夹对象的映射中映射组件。如前所述,您似乎正在尝试向Folders集合添加一个没有意义的组件。我对此感到惊讶。

我认为您的组件应该映射到文件夹对象的映射中。如前所述,您似乎正在尝试向Folders集合添加一个没有意义的组件。我对此感到惊讶。

问题在于
c.Map(x=>x.Name)
c.References(x=>x.User)
。lambda应该使用
c
,因为这是组件类

Id(x => x.Id);    
HasMany(x => x.Folders)
                .Component(c =>
                           {
                               c.Map(c => c.Name);
                               c.References(c => c.User);
                           })
                .Cascade.AllDeleteOrphan()
                .Access.AsCamelCaseField(Prefix.Underscore);

问题在于
c.Map(x=>x.Name)
c.References(x=>x.User)
。lambda应该使用
c
,因为这是组件类

Id(x => x.Id);    
HasMany(x => x.Folders)
                .Component(c =>
                           {
                               c.Map(c => c.Name);
                               c.References(c => c.User);
                           })
                .Cascade.AllDeleteOrphan()
                .Access.AsCamelCaseField(Prefix.Underscore);

对不起,我对问题进行了编辑以提供更多信息。您的编辑使我对我的答案更有信心。集合上不能有组件,它必须位于集合中的类上。请参阅:组件集合完全相同。我认为问题在于c.References(x=>x.User)。删除该行可以防止上述异常,但显然会在以后导致问题。谢谢。对不起,我对问题进行了编辑以提供更多信息。您的编辑使我对我的答案更有信心。集合上不能有组件,它必须位于集合中的类上。请参阅:组件集合完全相同。我认为问题在于c.References(x=>x.User)。删除该行可以防止上述异常,但显然会在以后导致问题。谢谢