如果执行services.AddSingleton <IValidationAttributeAdapterProvider, CustomValidationAttributeAdapterProvider> ();
,输出将是两列,第一列是未知数据类型,第二列是数据类型为整数。
如果执行using System;
using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
using Microsoft.Extensions.Localization;
using Microsoft.AspNetCore.Mvc.DataAnnotations.Internal;
public class MyRequiredAttributeAdaptor : AttributeAdapterBase<RequiredAttribute>
{
public MyRequiredAttributeAdaptor(RequiredAttribute attribute, IStringLocalizer stringLocalizer)
: base(attribute, stringLocalizer)
{
}
public override void AddValidation(ClientModelValidationContext context)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
MergeAttribute(context.Attributes, "data-val", "true");
MergeAttribute(context.Attributes, "data-val-required", GetErrorMessage(context));
}
/// <inheritdoc />
public override string GetErrorMessage(ModelValidationContextBase validationContext)
{
if (validationContext == null)
{
throw new ArgumentNullException(nameof(validationContext));
}
return GetErrorMessage(validationContext.ModelMetadata, validationContext.ModelMetadata.GetDisplayName());
}
}
,输出将是两列,第一列的数据类型为文本,第二列的数据类型为整数。
为什么添加MinLengthSixAttribute
功能与运行没有SELECT 'test', 123
的查询的数据类型有什么不同?
答案 0 :(得分:8)
Chapter 10. Type Conversion中描述了此行为。
在10.1. Overview中,您可以找到:
如果没有为字符串文字指定类型,则最初会分配占位符类型unknown,以便在以后阶段解决。
要选择不同的值,Postgres必须将字符串文字转换为具有相等运算符的类型。案件类似于工会:
select 'abc', 1
union
select 'def', 1
其中第一列被解析为text
。该规则在10.5. UNION, CASE, and Related Constructs中描述:
- 如果所有输入都是未知类型,请解析为类型文本(字符串类别的首选类型)。
醇>