Fluent nhibernate Fluent NHibernate 1.1:在不同类上使用多个列名映射时

Fluent nhibernate Fluent NHibernate 1.1:在不同类上使用多个列名映射时,fluent-nhibernate,Fluent Nhibernate,假设我把这个简化了 阶级客户 Idv=>v.numero_客户,numero_客户 HasManyv=>v.Acionamentos.Cascade.All.LazyLoad 阶级运动 Referencesv=>v.客户,id_Fornecedor 种族歧视 参考v=>v.客户,数量客户 Fluent nHibernate将生成错误的SQL,例如: 如果我尝试获取Acionamentos,那么它将抛出错误的SQL: 从Acionamentos中选择*,其中id\u Fornecedor=p0 但

假设我把这个简化了 阶级客户 Idv=>v.numero_客户,numero_客户 HasManyv=>v.Acionamentos.Cascade.All.LazyLoad

阶级运动 Referencesv=>v.客户,id_Fornecedor

种族歧视 参考v=>v.客户,数量客户

Fluent nHibernate将生成错误的SQL,例如: 如果我尝试获取Acionamentos,那么它将抛出错误的SQL:

从Acionamentos中选择*,其中id\u Fornecedor=p0

但在我的Acionamento映射中,我设置了一个对名为numero_cliente的列的引用,而不是对id_Fornecedor的引用

如果我在所有引用中始终使用相同的列名numero_cliente,则不会发生问题。但是我恐怕不能保证客户机类的所有列名在所有表上都是相同的

有人知道该怎么做吗?流利的NHibernate团队能看到这一点并在这里发表评论吗

如果您需要确切的SQL,请参见: 无法初始化集合: [Sistema.Clientes.Cliente.Acionamentos019012938/07][SQL:选择acionament0.id为NeC或作为id7.1的一个1,acionament0.id为id1.1,acionament0.id为id1.1,acionament0.id为Id0.id为Id0.id为Id0.id为Id0.id为Id0.id为Id0.id为Id0.id为Id0.id为Id0.id为Id0.id为Id0.id为Id0.id为Id0.id为Id0.id为Id0.id为Id0.id为Id0.id为Id0.id为Id0.id为Id0.Id0.id为Id0.id为Id0.id为Id0.id为Id0.id为Id0.Id0.id为Id0.id为Id0.id为Id0.id为Id0.阿西奥纳门托酒店acionament0\其中acionament0.id\u Fornecedor=

当试图获取Cliente.Acionamentos时,上面的错误就会出现

以下是HBM XML:

Sistema.Clientes.Cliente.hbm.xml:

<id name="numero_cliente" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <column name="numero_cliente" /> 
    <generator class="assigned" /> 
</id>
<bag cascade="all" lazy="true" name="Acionamentos" mutable="true">
    <key>
        <column name="id_Fornecedor" /><!-- oopps, this should be numero_cliente --> 
    </key>
   <one-to-many class="Sistema.CRM.Acionamento, Sistema, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> 
</bag>
Sistema.CRM.Acionamento.hbm.xml:

<many-to-one class="Sistema.Clientes.Cliente, Sistema, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="Cliente">
    <column name="numero_cliente" /> 
</many-to-one>
<many-to-one class="Sistema.Clientes.Cliente, Sistema, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="Cliente" not-found="ignore">
    <column name="id_Fornecedor" /> 
</many-to-one>
Estoque.Movimentacao.hbm.xml:

<many-to-one class="Sistema.Clientes.Cliente, Sistema, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="Cliente">
    <column name="numero_cliente" /> 
</many-to-one>
<many-to-one class="Sistema.Clientes.Cliente, Sistema, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="Cliente" not-found="ignore">
    <column name="id_Fornecedor" /> 
</many-to-one>

在您提供的帮助步骤和一些祈祷的帮助下,我解决了这个问题,添加了KeyColumn

Id(v => v.numero_cliente, "numero_cliente")
HasMany(v => v.Acionamentos).KeyColumn("numero_cliente").Cascade.All().LazyLoad()
添加后,生成的HBM更改为:

<bag cascade="all" lazy="true" name="Acionamentos" mutable="true">
    <key>
        <column name="numero_cliente" /> 
    </key>
    <one-to-many class="Sistema.CRM.Acionamento, Sistema, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> 
</bag>
并且不再发生SQL错误


我很高兴现在就可以使用它了!我真的不想在您提供的帮助步骤下使用EF

,有些人祈祷我解决了它,添加了KeyColumn

Id(v => v.numero_cliente, "numero_cliente")
HasMany(v => v.Acionamentos).KeyColumn("numero_cliente").Cascade.All().LazyLoad()
添加后,生成的HBM更改为:

<bag cascade="all" lazy="true" name="Acionamentos" mutable="true">
    <key>
        <column name="numero_cliente" /> 
    </key>
    <one-to-many class="Sistema.CRM.Acionamento, Sistema, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> 
</bag>
并且不再发生SQL错误


我很高兴现在就可以使用它了!我真的不想使用EF

错误的方法?这不是Fluent NHibernate的错误跟踪网站。如果生成错误的SQL有问题,请发布生成的SQL以及您想要的SQL,这样用户可能可以帮您解决问题。您将有e来添加更多细节。这里真的没有什么可以做的。错误的SQL可能意味着什么。也许我们宝贵的朋友@James Gregory或@paul batum可以说明这一点。Fornecedor和DataHora-我几乎不敢通过Google Translate运行它们…你能从生成的xml映射文件中粘贴代码吗?这应该有助于找到你的pr问题。怎么做是错误的?这不是Fluent NHibernate的错误跟踪网站。如果您在生成错误的SQL时遇到问题,请发布生成的SQL以及希望生成的SQL,以便用户可以帮助您解决问题。您必须添加更多详细信息。这里真的没有任何问题。错误的SQL c也许我们的好朋友@James Gregory或@paul batum可以说明这一点。Fornecedor和DataHora-我几乎不敢通过Google Translate运行它们…你能从生成的xml映射文件中粘贴代码吗?这应该有助于发现你的问题。