Odata Olingo:EntityContainer和EntitySets差异

Odata Olingo:EntityContainer和EntitySets差异,odata,olingo,Odata,Olingo,我阅读本文是为了弄清楚如何创建odata服务 我不太清楚什么是EntityContainer和EntitySet [编辑] 我想问一个我还不太明白的误会。如果一个实体集直接是一组实体: 为什么我需要在我的OData提供程序上实现EntitySet CsdlAbstractEdmProvider.getEntitySet()方法?正如您在上所看到的,我需要实现这个返回EntitySet的方法。这是Olingo文档的实现: public CsdlEntitySet getEntitySet(Full

我阅读本文是为了弄清楚如何创建odata服务

我不太清楚什么是
EntityContainer
EntitySet

[编辑]

我想问一个我还不太明白的误会。如果一个
实体集直接是一组实体:

为什么我需要在我的OData提供程序上实现
EntitySet CsdlAbstractEdmProvider.getEntitySet()
方法?正如您在上所看到的,我需要实现这个返回
EntitySet
的方法。这是Olingo文档的实现:

public CsdlEntitySet getEntitySet(FullQualifiedName entityContainer, String entitySetName) {

  if(entityContainer.equals(CONTAINER)){
    if(entitySetName.equals(ES_PRODUCTS_NAME)){
      CsdlEntitySet entitySet = new CsdlEntitySet();
      entitySet.setName(ES_PRODUCTS_NAME);
      entitySet.setType(ET_PRODUCT_FQN);

      return entitySet;
    }
  }

  return null;
}
我不太明白这个实现是为了什么

另一方面,在
EntityCollectionProcessor
上,您可以看到他们也在使用
EntitySet

我不明白提供者内部的
EntitySet
和处理器内部的区别是什么

根据第4.1节的内容,我不知道我是否解释得这么好

EDM的核心概念是实体和关联实体是实体类型的实例(例如,客户、员工等),这些实体类型是结构化记录,由命名和类型化属性组成,并带有一个键。复杂类型是结构化类型,也由属性列表组成,但没有键,因此只能作为包含实体的属性或临时值存在。实体键由实体类型的属性子集构成。实体键(例如CustomerId或OrderId)是唯一标识实体类型实例并允许实体类型实例参与关系的基本概念实体分组在实体集中(例如,客户是一组客户实体类型实例)。

关联定义两个或多个实体类型(例如,部门的员工工作表)之间的关系。关联实例在关联集中分组。导航属性是绑定到特定关联的实体类型的特殊属性,可用于引用实体的关联

最后,所有实例容器(实体集和关联集)都分组在一个实体容器中。

总结:

  • EntitySet是一组实体。通常,EntitySet是一个业务对象;要使用关系数据库比较,请将EntitySet视为表,将实体视为该表中的行
  • EntityContainer就是EntitySet和关联的容器。大致上,您可以将其视为包含表、视图等的数据库
希望这有帮助

在问题更改后编辑:

Provider.getEntitySet()方法和Processor.getEntitySet()之间的差异归结为Provider类和Processor类的用途不同

  • Provider类定义OData服务的结构和元数据。getEntitySet方法定义每个实体集的结构(名称和类型)
  • Processor类本质上是OData服务的servlet。在这里,HTTP请求被解析、处理和重定向(到您的服务或DAO层)。处理器中的getEntitySet方法用于处理以下结构的请求:(主机和端口)/(service root.svc)/(MyEntitySet),例如:。在这个方法中,确定请求了哪个实体集,然后调用DAO相应地获取数据
基于第4.1节:

EDM的核心概念是实体和关联实体是实体类型的实例(例如,客户、员工等),这些实体类型是结构化记录,由命名和类型化属性组成,并带有一个键。复杂类型是结构化类型,也由属性列表组成,但没有键,因此只能作为包含实体的属性或临时值存在。实体键由实体类型的属性子集构成。实体键(例如CustomerId或OrderId)是唯一标识实体类型实例并允许实体类型实例参与关系的基本概念实体分组在实体集中(例如,客户是一组客户实体类型实例)。

关联定义两个或多个实体类型(例如,部门的员工工作表)之间的关系。关联实例在关联集中分组。导航属性是绑定到特定关联的实体类型的特殊属性,可用于引用实体的关联

最后,所有实例容器(实体集和关联集)都分组在一个实体容器中。

总结:

  • EntitySet是一组实体。通常,EntitySet是一个业务对象;要使用关系数据库比较,请将EntitySet视为表,将实体视为该表中的行
  • EntityContainer就是EntitySet和关联的容器。大致上,您可以将其视为包含表、视图等的数据库
希望这有帮助

在问题更改后编辑:

Provider.getEntitySet()方法和Processor.getEntitySet()之间的差异归结为Provider类和Processor类的用途不同

  • Provider类定义OData服务的结构和元数据。getEntitySet方法定义每个实体集的结构(名称和类型)
  • Processor类本质上是OData服务的servlet。在这里,HTTP请求被解析、处理和重定向(到您的服务或DAO层)