使用流畅的NHibernate,我已经使用Id列(UsuarioConta)映射了一个实体,并且该实体将另一个实体(MoedaValor)作为组件引用,它没有Id列。但是当我尝试查询UsuarioConta时,它返回一个错误:Invalid column name 'Id'.
期待NHibernate查询,我可以看到NHibernate尝试在MoedaValor表中的一个不存在的列中进行查询,就好像我已经引用了一个Id列 - 我没有。
我的地图:
public class UsuarioContaMap
{
public UsuarioContaMap()
{
Table("UsuarioConta");
Id(x => x.Id).GeneratedBy.Identity()
References<Usuario>(x => x.Usuario)
.Column("IdUsuario")
.ForeignKey("FK_UsuarioConta_Usuario").Nullable();
HasMany<UsuarioContaMovimentacao>(x => x.Movimentacoes)
.KeyColumn("IdUsuarioConta")
.ForeignKeyConstraintName("FK_UsuarioContMov_UsuarioCont")
.Cascade.AllDeleteOrphan();
HasMany<MoedaValor>(x => x.Saldos)
.Table("UsuarioSaldo")
.KeyColumn("IdUsuarioConta")
.ForeignKeyConstraintName("FK_UsuarioSaldo_UsuarioConta")
.Cascade.AllDeleteOrphan()
.Fetch.Join()
.Component(x =>
{
x.References(y => (Moeda)y.Moeda)
.Column("IdMoeda")
.ForeignKey("FK_UsuarioSaldo_Moeda");
x.Map(y => y.Valor);
});
}
}
返回错误的查询:
选择movimentac2_.Id为col_0_0_,movimentac3_.Id为col_1_0_, saldos4_.Id为col_2_0 _ ,usuario0_.IdPessoa为col_3_0_,usuario0_.IdPessoa为col_4_0_,movimentac2_.Id为Id275_0_,movimentac3_.Id如Id275_1_,movimentac2_.Valor如Valor275_0_,movimentac2_.Tipo如Tipo275_0_,movimentac2_.Data如Data275_0_,movimentac2_.IdMoeda如IdMoeda275_0_,movimentac2_.IdUsuarioConta如IdUsuari6_275_0_,movimentac3_.Valor如Valor275_1_,movimentac3_.Tipo如Tipo275_1_,movimentac3_.Data如Data275_1_ ,movimentac3_.IdMoeda如IdMoeda275_1_,movimentac3_.IdUsuarioConta如IdUsuari6_275_1_从Usuario usuario0_内部联接佩索阿上usuario0_.IdPessoa = usuario0_1_.Id,UsuarioConta usuariocon1_ usuario0_1_左外侧上usuariocon1_.Id = movimentac2_.IdUsuarioConta加入UsuarioContaMovimentacao movimentac2_左外上usuariocon1_加入UsuarioContaMovimentacao movimentac3_ .Id = movimentac3_.IdUsuarioConta在usuariocon1_上留下外部加入UsuarioSaldo saldos4 _ 。 d = saldos4_.IdUsuarioConta其中usuario0_.Perfil&lt;&gt; @ p0和usuario0_.Perfil&lt;&gt; @ p1和usuariocon1_.IdUsuario = usuario0_.IdPessoa
我没有尝试获取结果的复杂查询,所以我认为问题出在地图上。它有一些错误吗?
答案 0 :(得分:0)
您尚未明确向Id提供列名。所以改变这个:
Id(x => x.Id).GeneratedBy.Identity()
对此:
Id(x => x.Id).GeneratedBy.Identity().Column("ColumnName")
Where&#34; ColumnName&#34;是主键列的名称。