C# 如何在ODataConventionModelBuilder中实现自定义约定
当针对OData v4服务时,我希望在客户端执行字符串长度验证,以防止数据往返到API,但是如果信息可以通过$metadata传递,我不希望手工编码每个输入字段 事实证明,C# 如何在ODataConventionModelBuilder中实现自定义约定,c#,odata,data-annotations,C#,Odata,Data Annotations,当针对OData v4服务时,我希望在客户端执行字符串长度验证,以防止数据往返到API,但是如果信息可以通过$metadata传递,我不希望手工编码每个输入字段 事实证明,ODataConventionModelBuilder确实正确地解释了数据类上的MaxLengthaAttribute,并设置了适当的EdmProperty值,但它没有解释StringLengthaAttribute的相应约定。$metadata中的以下代码片段显示了给定假设类定义的预期输出: 公共类NoteType {
ODataConventionModelBuilder
确实正确地解释了数据类上的MaxLengthaAttribute
,并设置了适当的EdmProperty
值,但它没有解释StringLengthaAttribute
的相应约定。$metadata
中的以下代码片段显示了给定假设类定义的预期输出:
公共类NoteType
{
[关键]
公共int Id{get;set;}
[长度(100)]
公共字符串标题{get;set;}
[最大长度(500)]
公共字符串说明{get;set;}
}
请注意,Description
用MaxLengthAttribute
注释,但Title
使用的是StringLengthAttribute
$metadata中的实际输出不包括Title
属性的MaxLength
:
我无法对数据类定义进行更改,因为它们是从第三方程序集派生的,因此我正在寻找一种通用解决方案,如果数据属性具有定义MaxLength
在EF6和EFCore中,我习惯于实现自定义约定以在DbContext中实现业务规则,因为
ODataConventionModelBuilder
的名称中包含约定一词,我希望能够定义自己的约定并将其插入管道。但是我找不到一个很好的例子来说明如何做到这一点。github上有一个open FeatureRequest:github上有一个open FeatureRequest: