3

我有一些具有关系的实体:

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 组件或接口商店。

如果我通过使用完全限定名称:

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

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

编辑:

这是中的相关部分Application.cfc

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

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

C:\Projects\StoreTracker\entities

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

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

this.mappings["/entities"] = "C:\Projects\StoreTracker\entities";

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

4

1 回答 1

4

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

您可能需要为您的应用程序创建一个 ColdFusion 映射。我不确定您的应用程序的结构或放置 ORM 对象的确切位置,但您可能希望在伪构造函数区域的 Application.cfc 中添加类似的内容。

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

更新:哦,别忘了 ormReload()

于 2011-09-29T20:55:22.957 回答