eclipse - 包含与引用之间的ECore有什么区别?

标签 eclipse reference entity-relationship containment eclipse-emf-ecore

在ECore实体之间创建引用时,可以将引用标记为“包含”。
有人可以用简单的语言解释我吗?简单引用和遏制之间有什么区别?到目前为止,我发现的定义和解释并不能解决我的问题。

最佳答案

引用:引用是简单的“A知道B”关系。单独的引用文献不会相互影响。 A可以知道B,而B可以知道C。因此,如果您拥有A,则可以通过B转到C。如果删除引用,A,B和C仍然存在,它们彼此之间不再相互了解。

遏制:遏制是“A有B”的一种关系。通常用于列表,例如“A有多个B”。然后,ECore / EMF可以在此类集合上执行原子命令,例如将所有对象从一个容器移动到另一个容器。它还可以强制执行约束,例如最小数量的包含对象或最大数量的包含对象,或确保所包含的对象不包含在任何其他包含中。

示例:

假设您有一个名为ShoppingCart的对象,该对象具有一个名为Customer的引用和一个名为OrderedProducts的容器。 OrderedProducts引用了Product

这个模型告诉你什么?

  • 您可以将客户分配给ShoppingCart。如果您从ShoppingCart中删除客户,则客户对象本身仍将存在(例如,在数据库中)
  • OrderedProduct对象需要存在ShoppingCart。如果您从ShoppingCart中删除一个商品,该商品将不复存在。
  • 每个OrderedProduct都有对数据库中现有产品的引用。如果您从ShoppingCart中删除其中一个OrderedProducts,则数据库中的产品仍然存在-仅针对该特定客户的该产品的订单就不存在了
  • 关于eclipse - 包含与引用之间的ECore有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3793527/

    相关文章:

    c++ - C++ 中的 Python 代码

    java - 基于用户主目录的 Eclipse 构建路径库 jar 文件

    excel - 如何制作自定义填充 handle 图案?

    java - Eclipse:与源目录隔离的项目目录

    java不会进入for循环(不包括==)

    c++ - 在 C++ 中延长临时值的生命周期

    java - 为什么instanceof不像听起来那样工作?

    ios - RestKit:初始映射后反向关系为空

    mysql - 如何解决两个表之间的循环引用?

    iphone - 如何在核心数据中保存单个实体