【发布时间】:2011-06-27 06:42:47
【问题描述】:
假设我有这个(简化)
类客户
Id(v => v.numero_cliente, "numero_cliente")
HasMany(v => v.Acionamentos).Cascade.All().LazyLoad()
类运动
参考文献(v => v.Cliente, "id_Fornecedor")
类Acionamento
参考文献(v => v.Cliente, "numero_cliente")
Fluent nHibernate 会生成错误的 SQL,例如:
如果我尝试获取 Acionamentos,那么它会抛出错误的 SQL:
SELECT * FROM Acionamentos WHERE id_Fornecedor=p0
但是在我的 Acionamento Mapping 中,我设置了对名为 numero_cliente 的列的引用,而不是对 id_Fornecedor
的引用如果我在所有引用上始终使用相同的列名“numero_cliente”,则不会出现问题。但恐怕我无法保证 Client 类的所有列名在所有表上都相同。
有人知道该怎么做吗? Fluent NHibernate 团队可以看到这一点并在此处发表评论吗?
如果你想要这里的确切 SQL:
无法初始化集合:
[Sistema.Clientes.Cliente.Acionamentos#019012938/07][SQL:选择 acionament0_.id_Fornecedor 作为 id7_1_,acionament0_.id_Acionamento 作为 id1_1_,acionament0_.id_Acionamento 作为 id1_6_0_,acionament0_.DataHora 作为 DataHora6_0_,_0_作为 Tipo6。 acionament0_.Descricao 为 Descricao6_0_,acionament0_.numero_cliente 为 numero5_6_0_,acionament0_.id_Usuario 为 id6_6_0_ FROM clientes.acionamento acionament0_ WHERE acionament0_.id_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>
Estoque.Movimentacao.hbm.xml:
<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>
【问题讨论】:
-
错了怎么办?这不是 Fluent NHibernate 的错误跟踪站点。如果您在生成错误的 SQL 时遇到问题,请发布正在生成的 SQL 以及您希望它是什么,以便用户可以帮助您解决问题。
-
您将不得不添加更多细节。这里真的没有什么可继续的。 “错误的 SQL”可能意味着任何事情。
-
也许我们宝贵的朋友@James-Gregory 或@paul-batum 可以说明这一点。
-
Fornecedor 和 DataHora - 我几乎不敢通过谷歌翻译运行它们...
-
你能从你生成的 xml 映射文件中粘贴代码吗?这应该有助于找到你的问题。 blog.yodersolutions.com/2009/07/…