如何在 .NET 中使用 OData 客户端处理未知 class 方案
How to handle unknown class scheme using OData Client in .NET
我正在 .NET Core 中构建一个应用程序,它连接到许多外部 OData 提供程序(Microsoft Dynamics Business Central 实例)。我们已经为 Business Central 建立了一个框架,当从一个数据源连接到另一个数据源时,它不会改变。为此,我使用 OData Connected Service 生成了一个代理,并勾选了所有不会更改的必需数据实体。它很好地生成了它们的 .NET 对象。
我的问题是,您对处理未知的设计时间有何建议类?我必须使用我自己的 DTO 将值转发到 HTTP Rest API。我能以某种方式从属性中获得 Dictionary
吗? Microsoft.OData.Client.DataServiceContext
可以吗?
来自数据源的示例:
DataSource 1
Entity - Foo
Property - AwesomeProperty : int
DataSource 2
Entity - Foo
Property - AnotherAwesomeProperty : string
Property - AwesomeProperty : string
DataSource 3
Entity - Bar
Property - AFooBarProperty : decimal
查询的预期结果:
// Query DataSource 1
Dictionary<string, object>()
{
Key: "AwesomeProperty" , Value : 15
}
// Query DataSource 2
Dictionary<string, object>()
{
Key: "AnotherAwesomeProperty" , Value : "Whosebug rocks!"
Key: "AwesomeProperty" , Value : "In this datasource, I am a string!"
}
// Query DataSource 3
Dictionary<string, object>()
{
Key: "AFooBarProperty" , Value : 3.147
}
简单的回答:你不能用那个库来做到这一点。据我所知。
但是,您可以改用 SimpleODataClient
,它也支持未知架构。
它在进行查询时解析元数据,并根据 $metadata.
返回具有正确映射对象类型(int、string 等)的 Dictionary<string,object>
如果$metadata还能变,我推荐你使用HTTPClient,实现你自己的服务。
我正在 .NET Core 中构建一个应用程序,它连接到许多外部 OData 提供程序(Microsoft Dynamics Business Central 实例)。我们已经为 Business Central 建立了一个框架,当从一个数据源连接到另一个数据源时,它不会改变。为此,我使用 OData Connected Service 生成了一个代理,并勾选了所有不会更改的必需数据实体。它很好地生成了它们的 .NET 对象。
我的问题是,您对处理未知的设计时间有何建议类?我必须使用我自己的 DTO 将值转发到 HTTP Rest API。我能以某种方式从属性中获得 Dictionary
吗? Microsoft.OData.Client.DataServiceContext
可以吗?
来自数据源的示例:
DataSource 1
Entity - Foo
Property - AwesomeProperty : int
DataSource 2
Entity - Foo
Property - AnotherAwesomeProperty : string
Property - AwesomeProperty : string
DataSource 3
Entity - Bar
Property - AFooBarProperty : decimal
查询的预期结果:
// Query DataSource 1
Dictionary<string, object>()
{
Key: "AwesomeProperty" , Value : 15
}
// Query DataSource 2
Dictionary<string, object>()
{
Key: "AnotherAwesomeProperty" , Value : "Whosebug rocks!"
Key: "AwesomeProperty" , Value : "In this datasource, I am a string!"
}
// Query DataSource 3
Dictionary<string, object>()
{
Key: "AFooBarProperty" , Value : 3.147
}
简单的回答:你不能用那个库来做到这一点。据我所知。
但是,您可以改用 SimpleODataClient
,它也支持未知架构。
它在进行查询时解析元数据,并根据 $metadata.
Dictionary<string,object>
如果$metadata还能变,我推荐你使用HTTPClient,实现你自己的服务。