public void Build(IDbDataParameter adoParameter) { IBindingMetadata metadata = this.Field?.Identity.GetMetadata <IBindingMetadata>(); IBindingParameterContract contract = metadata?.Parameter; adoParameter.ParameterName = this.Name; if (contract?.Convert != null) { adoParameter.Value = contract.Convert(this.Field?.Value); } else if (this.Field != null) { adoParameter.Value = this.Field.Value; } else { adoParameter.Value = DBNull.Value; } if (contract?.Write != null) { BindingParameterInfo paramInfo = new BindingParameterInfo() { Metadata = metadata, Parameter = adoParameter, Field = this.Field, }; contract.Write(paramInfo); } }
public void Build(IDbDataParameter adoParameter) { IBindingMetadata metadata = this.Source?.Identity.Metadata.Require <IBindingMetadata>(); IBindingParameterContract contract = metadata?.Parameter; adoParameter.ParameterName = this.Name; if (contract?.Convert != null) { adoParameter.Value = contract.Convert(this.Source?.Snapshot); } else if (this.Source != null) { adoParameter.Value = this.Source.Snapshot; } else { adoParameter.Value = DBNull.Value; } if (contract?.Write != null) { BindingParameterInfo paramInfo = new BindingParameterInfo() { Metadata = metadata, Parameter = adoParameter, Field = this.Source, }; contract.Write(paramInfo); } }
public IBindingParameterContract GetParameterContract(IBindingMetadata metadata) { IBindingParameterContract fallback = metadata.Parameter; if (metadata.Annotations.OfType <JsonAttribute>().Any()) { return(new BindingParameterContract() { Convert = fallback.Convert, Write = pi => { fallback?.Write?.Invoke(pi); if (pi.Parameter is NpgsqlParameter npgParam) { npgParam.NpgsqlDbType = NpgsqlDbType.Json; } } });
public IBindingParameterContract GetParameterContract(IBindingMetadata metadata) { if (metadata.Type == typeof(DateTime) || metadata.Type == typeof(DateTime?)) { IBindingParameterContract fallback = metadata.Parameter; return(new BindingParameterContract() { Convert = fallback.Convert, Write = pi => { fallback?.Write?.Invoke(pi); pi.Parameter.DbType = DbType.DateTime2; } }); } return(null); }
/// <summary> /// Appends a table-valued parameter from the current values, e.g. <c>@TP0</c>, to the projection buffer. /// </summary> /// <param name="projection">The current projection.</param> /// <returns>A new attribute containing the appended buffer.</returns> public static IProjectionAttribute TvpName(this IProjection projection) { if (projection.Source == null) { throw ProjectionException.ValueNotFound(projection); } else if (!projection.Attributes.Any()) { throw ProjectionException.FromProjection(projection, "No attributes found."); } IProjectionMetadata metadata = TvpHelper.GetPreferredTvpMetadata(projection); IField source = new Relation(projection.Source, metadata.Identity.Name).Scalar(); RelationIdentity identity = new RelationIdentity(metadata.Identity.Schema, projection.Attributes.Select(a => a.Metadata.Identity)); IBindingParameterContract contract = TvpCache.GetParameterContract(identity); string paramName = projection.Context.Lookup.Custom("TP", projection.Identity, field: source); string dialectName = projection.Context.Domain.Dialect.Parameter(paramName); return(projection.Attr().Append(dialectName).Append(new Parameter(paramName, source, contract))); }
public static IDbDataParameter CreateAdoParameter(IDbCommand adoCommand, IParameter parameter) { IDbDataParameter adoParameter = adoCommand.CreateParameter(); IBindingMetadata metadata = parameter.Field?.Identity.GetMetadata <IBindingMetadata>(); IBindingParameterContract contract = parameter.Contract ?? metadata?.Parameter; adoParameter.ParameterName = parameter.Name; if (contract?.Convert != null) { adoParameter.Value = contract.Convert(parameter.Field?.Value); } else if (parameter.Field != null) { adoParameter.Value = parameter.Field.Value; } else { adoParameter.Value = DBNull.Value; } if (contract?.Write != null) { BindingParameterInfo paramInfo = new BindingParameterInfo() { Metadata = metadata, Parameter = adoParameter, Field = parameter.Field, }; contract.Write(paramInfo); } return(adoParameter); }
public Parameter(string name, IField field = null, IBindingParameterContract contract = null) { this.Name = name ?? throw new ArgumentNullException(nameof(name)); this.Field = field; this.Contract = contract; }