从IEdmModel中获取entitySetName

本文关键字:entitySetName 获取 IEdmModel | 更新日期: 2023-09-27 18:02:37

我正在构建一个基于DataServiceContext的扩展OData客户端。我有一个工作的IEdmModel,可以将实体绑定到它。但是我想根据Type获取entitySetName。

例如,如果您想从Odata.org示例中获取所有产品,entitySetName是 products 。如果我只知道类型是Product,我能从IEdmModel得到这个吗?或者如果我知道模型类型是Category,则entitySetName是Categories

我知道我可以尝试手动将其复数化(通过将s附加到类型等),但我认为必须有更正确的方法来做到这一点?

我想这样做的原因是我使用DataServiceContext.CreateQuery<T>,它需要entitySetName作为字符串。

/// <summary>
/// Creates a data service query for data of a specified generic type.
/// </summary>
/// 
/// <returns>
/// A new <see cref="T:Microsoft.OData.Client.DataServiceQuery`1"/> instance that represents a data service query.
/// </returns>
/// <param name="entitySetName">A string that resolves to a URI.</param><typeparam name="T">The type returned by the query</typeparam>
/// <remarks>
/// create a query based on (BaseUri + relativeUri)
/// </remarks>
public DataServiceQuery<T> CreateQuery<T>(string entitySetName)
{
}

我看到过这个问题,但它的范围略有不同。

我如何生成一个绝对的OData URL为给定的实体类型?

IEdmModel.EntityContainer.Elements返回一个IEnumerable<IEdmEntityContainerElement>,实际上是一个IEnumerable<CsdlSemanticsEntitySet>。它包含entitySetName,但由于它的保护级别,我不能强制转换到它,因此我无法获得它

从IEdmModel中获取entitySetName

我确定你想要这个:

model.EntityContainer.Elements.OfType<IEdmEntitySet>()....