从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,但由于它的保护级别,我不能强制转换到它,因此我无法获得它
我确定你想要这个:
model.EntityContainer.Elements.OfType<IEdmEntitySet>()....