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

C# NHibernate尝试在不存在的列中进行查询,c#,sql-server,nhibernate,fluent-nhibernate,C#,Sql Server,Nhibernate,Fluent Nhibernate,使用fluent NHibernate,我映射了一个具有Id列(UsuarioConta)的实体,该实体引用另一个实体(MoedaValor)作为组件,它没有Id列。但当我试图查询UsuarioConta时,它返回一个错误:无效的列名“Id”。 查看NHibernate查询,我可以看到NHibernate试图在MoedaValor表中的一个不存在的列中进行查询,就好像我引用了一个Id列—我没有引用 我的地图: public class UsuarioContaMap { public U

使用fluent NHibernate,我映射了一个具有Id列(UsuarioConta)的实体,该实体引用另一个实体(MoedaValor)作为组件,它没有Id列。但当我试图查询UsuarioConta时,它返回一个错误:
无效的列名“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);
                           });

    }
}
public类UsuarioContaMap
{
公共USUARIONTAMAP()
{
表(“UsuarioConta”);
Id(x=>x.Id).GeneratedBy.Identity()
参考(x=>x.Usuario)
.栏(“Idusario”)
.ForeignKey(“FK_UsuarioConta_Usuario”).Nullable();
有很多(x=>x.Movimentacoes)
.KeyColumn(“IdUsuarioConta”)
.ForeignKeyConstraintName(“FK_UsuarioContMov_UsuarioCont”)
.Cascade.AllDeleteOrphan();
HasMany(x=>x.Saldos)
.表格(“UsuarioSaldo”)
.KeyColumn(“IdUsuarioConta”)
.ForeignKeyConstraintName(“FK_UsuarioSaldo_UsuarioConta”)
.Cascade.alldelete孤儿()
.Fetch.Join()
.Component(x=>
{
x、 参考文献(y=>(Moeda)y.Moeda)
.栏(“IdMoeda”)
.ForeignKey(“FK_UsuarioSaldo_Moeda”);
x、 Map(y=>y.Valor);
});
}
}
返回错误的查询:

“选择Movementac2\uu.Id作为Colu 0 0 0 0 0 0 0 0 0 0 0,Movementac3.Id作为Colu 1 0 0 0 0,强>saldos4.Id作为Colu 2 2 0 0 0 0 0 0 0 0 0 0.强>将Movementac2 2 2.UuuuU2.Id作为Col2.Id作为Movementac2.Id作为Col2 2 2.UU2.Id作为Colu 2.U2.Uuuuuuu2.Id作为Col2.UU2.U2.U2.Id作为Col2.UU2.U2.U2.U2.U2.U2.U2.Id作为Col2.U2.U2.U2.Id作为Col2.U2.U2.U0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 275_0_,Movientac2.IdMoeda作为IdMoeda 275_0,Movientac2.Idusarioconta作为Idusari6_275_0,Movientac3.Valor作为Valor 275_1,Movientac3.Tipo作为Tipo 275_1,Movientac3.IdMoeda作为数据275_1,Movietac3.IdMoeda作为IdMoeda 275_1,从Usuario Usuario 0将IdUsuarioConta作为IdUsuari6_275_1_从Usuario Usuario 0_内部连接到Usuario上的Pessoa Usuario_1_。IdPessoa=Usuario_1_u.Id,UsuarioConta UsuarioConta UsuarioConta左外联UsuarioConta左外联UsuarioConta左外联UsuarioConta左外联UsuarioConta左外联UsuarioConta左外联UsuarioConta通常是0。Perfil@p0通常是0。Perfil@p1和usuariocon1_uu0.iduuario=usuario0_u0.IdPessoa


我没有复杂的查询试图得到结果,所以我认为问题出在地图上。有错误吗?

您没有明确地为Id指定列名。因此,改变这一点:

Id(x => x.Id).GeneratedBy.Identity()
为此:

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

其中“ColumnName”是主键列的名称。

因为此查询是在Hibernate之外封装的,所以需要检查通过列各自的ID调用列的函数。查看正在填充的值并从那里向后工作。即使实体MoedaValor没有任何Id变量?此外,我在查询中所做的唯一比较是使用Usuario实体,而不是MoedaValorI可能会稍微偏离该方法,但是如果Hibernate作为RDBMS是值得的,那么它应该有一个表,根据其ID列出每个表的列。这意味着Hibernate在最坏的情况下不是RDBMS(缺少/额外的列将违反引用完整性),或者应用程序代码中可能存在关闭的内容。因此,请从应用程序到问题所在的RDBMS进行验证。可以在表中获取Hibernate识别的列列表(直接查询Hibernate),但请验证您的方法返回的内容。@clifton_h NHibernate不是RDBMS,而是ORM。到表列的所有映射都是在提出问题的人包含的映射文件中完成的。MoedaValor的映射看起来像什么?