【问题标题】:EMF dangling reference when I save my model保存模型时的 EMF 悬空参考
【发布时间】:2021-09-28 20:38:20
【问题描述】:

我已经使用 EMF 创建了一个模型,我希望能够使用编辑器保存我的模型并稍后打开它。 例如,假设我的模型有 3 个类:A、B、C 和 R。R 是根父级。类 C 有一个对 A 的引用和一个对 B 的引用。 当我编辑我的模型时,一切正常。但是,如果我想将我的文件保存到另一个位置,我可以打开它,但我无法再保存它,而不会收到一条错误消息,告诉我我的 C 对象中的引用是悬空引用。 保存时的xml文件如下图供我参考:

<refToA ="//@CompElement.0/@composit/@parts.0">

我尝试在我的 ecore 文件中将 containsable 设置为 true。悬空引用消失,但保存后如果我触摸 B 的属性,更改不适用于引用,因为现在我有两个 B 对象。

我怎样才能正确地引用并保存它?

【问题讨论】:

    标签: java eclipse rcp eclipse-emf


    【解决方案1】:

    我的模型有 3 个类:A、B、C 和 R

    你的意思是你的元模型有 3 个 EClass/元类 A、B、C 和 R。

    R 是根父节点

    模型的根元素属于 R 类型。 A、B、C是如何包含的?

    当我编辑我的模型时,一切正常。但是如果我想将我的文件保存到另一个位置,我可以打开它,但我不能再保存了

    我怀疑只是将您的资源保存到一个位置或另一个位置会对您的模型产生重大影响。您如何编辑它并将其保存到另一个位置?

    【讨论】:

    • 是的,我对模型和元模型感到困惑,我有 4 个类(不是 3 个)A、B、C 和 R。R 可以包含 A、B 和 C 的对象。并且 C 必须能够引用已创建的 A 和 B 类型的对象。现在使用编辑器,如果我创建模型并保存它,它会创建悬空引用。错误日志表明悬空 ref 来自 C 中的引用。
    • 如何设置 C 类型元素 c1 中对 A 和 B 实例的引用?
    【解决方案2】:

    我找到了解决方案。 在我的 XMI 文件模型中是这样保存的:

    <R>
      <C refA... refB...>
      <\C>
      <A><\A>
      <B><\B>
    <\R>
    

    需要像这样保存 A 和 B 对象后放置参考:

    <R>
      <A><\A>
      <B><\B>
      <C refA... refB...>
      <\C>
    <\R>
    

    【讨论】:

      猜你喜欢
      • 2016-05-09
      • 1970-01-01
      • 2020-01-04
      • 2015-01-14
      • 2013-06-26
      • 1970-01-01
      • 2013-03-30
      • 2021-09-26
      • 1970-01-01
      相关资源
      最近更新 更多