使用虚拟目录时,ColdFusion ORM无法找到CFC

时间:2011-09-29 20:48:24

标签: orm coldfusion coldfusion-9 cfc application.cfc

我有一些关系实体:

component name="Store" persistent="true"
{
    property name="Products" fieldtype="one-to-many" cfc="Product";
}

component name="Product" persistent="true"
{
    property name="Store" fieldtype="many-to-one" cfc="Store";
}

以上代码已简化。我的项目位于C:\ColdFusion9\wwwroot\StoreTracker,一切都很顺利。

但后来我不得不把它移到一个虚拟目录。我将项目移动到C:\Projects\StoreTracker,但现在ORM不再工作,出现以下错误:

  

无法为CFC产品中的关系属性Store加载目标CFC存储。

     

找不到ColdFusion组件或接口Store。

如果我完全符合名称,请使用:

property name="Store" fieldtype="many-to-one" cfc="entities.Store";

然后ORM工作。有没有人知道为什么将它移动到虚拟目录会导致ORM在错误的文件夹中搜索持久性实体,如果有更简单的方法来更改它正在搜索的文件夹,那么我不必完全限定每个关系?

修改

以下是Application.cfc中的相关部分:

this.ormSettings = { cfclocation="entities" };

模型文件夹的文件夹结构:

  

C:\项目\ StoreTracker \实体

实体文件夹下没有子文件夹,我的所有持久性实体都在那里。

如果我将以下行添加到Application.cfc

,我就能正常工作
this.mappings["/entities"] = "C:\Projects\StoreTracker\entities";

虽然我不确定为什么会这样。如果没有它,CF ORM似乎只是读取实体,如果它们只有简单的属性,但是当存在关系时,它会爆炸说它无法找到相关的CFC。也许是一个错误?

1 个答案:

答案 0 :(得分:4)

如果虚拟目录是指在Apache或IIS中设置的虚拟目录,那么这是有道理的。这些虚拟目录存在于Web服务器中,而不存在于ColdFusion中。 CF不了解它们。

您可能需要为应用程序创建ColdFusion映射。我不确定您的应用程序是如何构造的或者您将ORM对象放在何处,但您可能希望在伪构造函数区域中向Application.cfc添加类似的内容。

<cfset application.mappings["/StoreTracker"] = "C:\Projects\StoreTracker" />

更新:哦,别忘了ormReload()