NHibernate为关联使用了错误的列名 //Url类的映射 本表(“URL”); this.Id(x=>x.Id).GeneratedBy.GuidComb().Access.BackingField(); this.Map(x=>x.Address).Access.BackingField(); this.HasMany(x=>x.Parameters) .Inverse() .AsList(col=>col.Column(“参数索引”)) .Cascade.alldelete孤儿() .Access.BackingField(); //UrlParameter类的映射 此表(“UrlParameters”); this.Id(x=>x.Id).GeneratedBy.GuidComb().Access.BackingField(); this.References(x=>x.Url).Column(“Url”).Access.BackingField(); this.Map(x=>x.Name).Access.BackingField(); //执行查询的代码 Session.Query().FetchMany(x=>x.Parameters); //生成的SQL 选择url0.ID作为ID1\u 0\u,参数1\u.ID作为ID2\u 1\u,url0\u地址作为Address1\u 0,url0\u。禁止作为Prohibited1\u 0,url0\u.CreatedOn作为CreatedOn1\u 0,url0\u。最后更新为LastUpda5\u 1\u 0,url0\u。TotalComments作为TotalCom6\u 1\u 0,url0\u。TotalNegative作为TotalNeg7\u 1\u 0,url0,url0_u0.CreatedBy作为CreatedBy1_0,parameters1_0.Name作为Name2_1,parameters1_0.Url作为Url2_1,parameters1_0.Url作为Url4_0_uu,parameters1_0.id作为ID0_u0,parameters1_0.ParameterIndex作为参数5_0,从url0上的url0_0左外连接参数1_0.id=parameters1_0.Url,其中0@uUrl0@Url地址 //异常消息 消息=无效的列名“Url\u id”。

NHibernate为关联使用了错误的列名 //Url类的映射 本表(“URL”); this.Id(x=>x.Id).GeneratedBy.GuidComb().Access.BackingField(); this.Map(x=>x.Address).Access.BackingField(); this.HasMany(x=>x.Parameters) .Inverse() .AsList(col=>col.Column(“参数索引”)) .Cascade.alldelete孤儿() .Access.BackingField(); //UrlParameter类的映射 此表(“UrlParameters”); this.Id(x=>x.Id).GeneratedBy.GuidComb().Access.BackingField(); this.References(x=>x.Url).Column(“Url”).Access.BackingField(); this.Map(x=>x.Name).Access.BackingField(); //执行查询的代码 Session.Query().FetchMany(x=>x.Parameters); //生成的SQL 选择url0.ID作为ID1\u 0\u,参数1\u.ID作为ID2\u 1\u,url0\u地址作为Address1\u 0,url0\u。禁止作为Prohibited1\u 0,url0\u.CreatedOn作为CreatedOn1\u 0,url0\u。最后更新为LastUpda5\u 1\u 0,url0\u。TotalComments作为TotalCom6\u 1\u 0,url0\u。TotalNegative作为TotalNeg7\u 1\u 0,url0,url0_u0.CreatedBy作为CreatedBy1_0,parameters1_0.Name作为Name2_1,parameters1_0.Url作为Url2_1,parameters1_0.Url作为Url4_0_uu,parameters1_0.id作为ID0_u0,parameters1_0.ParameterIndex作为参数5_0,从url0上的url0_0左外连接参数1_0.id=parameters1_0.Url,其中0@uUrl0@Url地址 //异常消息 消息=无效的列名“Url\u id”。,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,当我明确告诉NHibernate在我的Url参数映射中使用“Url”时,为什么NHibernate会生成一个列名“Url\u id”?您需要在HasMany映射中定义KeyColumn()列 它应该与您在References()侧(“Url”)上写的内容相匹配。KeyColumn(“Url”)-非常感谢! //Map for Url class this.Table("Urls"); this.Id(x => x.ID).GeneratedBy.GuidComb().Access.Back

当我明确告诉NHibernate在我的Url参数映射中使用“Url”时,为什么NHibernate会生成一个列名“Url\u id”?

您需要在
HasMany
映射中定义
KeyColumn()

它应该与您在
References()
侧(
“Url”
)上写的内容相匹配。

KeyColumn(“Url”)-非常感谢!
//Map for Url class
this.Table("Urls");
this.Id(x => x.ID).GeneratedBy.GuidComb().Access.BackingField();
this.Map(x => x.Address).Access.BackingField();
this.HasMany(x => x.Parameters)
    .Inverse()
    .AsList(col => col.Column("ParameterIndex"))
    .Cascade.AllDeleteOrphan()
    .Access.BackingField();


//Map for UrlParameter class
this.Table("UrlParameters");
this.Id(x => x.ID).GeneratedBy.GuidComb().Access.BackingField();
this.References(x => x.Url).Column("Url").Access.BackingField();
this.Map(x => x.Name).Access.BackingField();

//Code to execute the query
Session.Query<Url>().FetchMany(x => x.Parameters);


//The SQL generated
select url0_.ID as ID1_0_, parameters1_.ID as ID2_1_, url0_.Address as Address1_0_, url0_.Prohibited as Prohibited1_0_, url0_.CreatedOn as CreatedOn1_0_, url0_.LastUpdatedOn as LastUpda5_1_0_, url0_.TotalComments as TotalCom6_1_0_, url0_.TotalNegative as TotalNeg7_1_0_, url0_.TotalNeutral as TotalNeu8_1_0_, url0_.TotalPositive as TotalPos9_1_0_, url0_.CreatedBy as CreatedBy1_0_, parameters1_.Name as Name2_1_, parameters1_.Url as Url2_1_, parameters1_.Url_id as Url4_0__, parameters1_.ID as ID0__, parameters1_.ParameterIndex as Paramete5_0__ from Urls url0_ left outer join UrlParameters parameters1_ on url0_.ID=parameters1_.Url_id where url0_.Address=@p0

//Exception message
Message=Invalid column name 'Url_id'.