1
//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'.

UrlParameterマッピングで「Url」を使用するように明示的に指示したのに、NHibernateが列名「Url_id」を生成するのはなぜですか?

4

1 に答える 1

3

マッピングでKeyColumn()列を定義する必要があります。HasMany

横に書いたものと一致する必要がありますReferences()"Url")。

于 2012-05-26T22:57:00.173 に答える