/// <summary> /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// the same compatibility standards as public APIs. It may be changed or removed without notice in /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// </summary> public virtual Expression CreateReadValueExpression( Expression valueBuffer, Type type, int index) => Expression.Call( TryReadValueMethod.MakeGenericMethod(type), valueBuffer, Expression.Constant(index));
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public virtual Expression CreateReadValueExpression( Expression valueBuffer, Type type, int index, IProperty property) => Expression.Call( TryReadValueMethod.MakeGenericMethod(type), valueBuffer, Expression.Constant(index), Expression.Constant(property, typeof(IPropertyBase)));
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public virtual Expression CreateReadValueExpression( Expression valueBuffer, Type type, int index, IProperty property) { var converter = property?.FindMapping()?.Converter; if (converter != null) { // If the type is an exact match, then use the generic converter directly to // avoid additional boxing and conversions. This should be the common case. if (type == converter.ModelType) { return(Expression.Call( TryReadValueWithConvertMethod.MakeGenericMethod(converter.ModelType, converter.StoreType), valueBuffer, Expression.Constant(index), Expression.Constant(converter.RawConvertFromStore), Expression.Constant(property, typeof(IPropertyBase)))); } return(Expression.Call( TryReadValueWithObjectConvertMethod.MakeGenericMethod(type), valueBuffer, Expression.Constant(index), Expression.Constant(converter.ConvertFromStore), Expression.Constant(property, typeof(IPropertyBase)))); } return(Expression.Call( TryReadValueMethod.MakeGenericMethod(type), valueBuffer, Expression.Constant(index), Expression.Constant(property, typeof(IPropertyBase)))); }