static Type GetNonNullableType(this Type type) { return(NonNullableTypes.GetOrAdd(type, key => { if (key.IsGenericType && key.GetGenericTypeDefinition() == NullableType) { return key.GetGenericArguments()[0]; } return key; })); }
bool IsNullable(ModelAttribute modelAttribute) { return !modelAttribute.Required && !modelAttribute.IsIdentity && !modelAttribute.IsConcurrencyToken && !NonNullableTypes.Contains(modelAttribute.Type); }