NHibernate尝试在不存在的列中进行查询

时间:2016-10-28 16:42:22

标签: c# sql-server nhibernate fluent-nhibernate

使用流畅的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

我没有尝试获取结果的复杂查询,所以我认为问题出在地图上。它有一些错误吗?

1 个答案:

答案 0 :(得分:0)

您尚未明确向Id提供列名。所以改变这个:

Id(x => x.Id).GeneratedBy.Identity()

对此:

Id(x => x.Id).GeneratedBy.Identity().Column("ColumnName")

Where&#34; ColumnName&#34;是主键列的名称。