internal DbParameter WrapinDbParameter(DataTable dataTable, DbParameterSettings dbParameterSettings) { if (dbParameterSettings == null) { throw new ArgumentNullException(nameof(dbParameterSettings)); } dataTable.TableName = dbParameterSettings.DatabaseObjectName; switch (dbParameterSettings.DatabaseType) { case DatabaseType.Sql: return(new SqlParameter(dbParameterSettings.ParameterName, SqlDbType.Structured) { Value = dataTable, TypeName = dbParameterSettings.DatabaseObjectName }); case DatabaseType.Oracle: case DatabaseType.MySql: throw new NotImplementedException($"Database type {dbParameterSettings.DatabaseType} has not been implemented yet."); default: throw new ArgumentOutOfRangeException(); } }
/// <summary> /// Translates a list of objects to a database parameter /// </summary> /// <typeparam name="TProfile">Type of a translation profile</typeparam> /// <typeparam name="KTranslationDataType">Type of object to translate</typeparam> /// <param name="source">The data to translate to a data table</param> /// <param name="dbParameterSettings">Additional settings for generating the database parameter</param> /// <param name="translationName">Name of the translation to use (must be specified if more than one translation is in the provided profile for the given type)</param> /// <returns></returns> public static DbParameter TranslateToDbParameter <TProfile, KTranslationDataType>(IEnumerable <KTranslationDataType> source, DbParameterSettings dbParameterSettings, string translationName) where TProfile : TranslationProfile, new() where KTranslationDataType : new() { PreTranslateValidation(); var engine = _engines.GetEngine <DbParameterTranslationEngine>(); return(engine.WrapinDbParameter(engine.FillDataTable( _store.SingleInitializedTranslation <TProfile, KTranslationDataType>(translationName), source), dbParameterSettings)); }
/// <summary> /// Translates a list of objects to a database parameter using an adhoc translation (not contained in a TranslationProfile) /// </summary> /// <typeparam name="KTranslationDataType">Type of object to translate</typeparam> /// <param name="translationExpression">Translation expression to use in the translation</param> /// <param name="source">The data to translate to a data table</param> /// <param name="dbParameterSettings">Additional settings for generating the database parameter</param> /// <returns>Translated database parameter</returns> public static DbParameter AdhocTranslateToDbParameter <KTranslationDataType>(TranslationExpression <KTranslationDataType> translationExpression, IEnumerable <KTranslationDataType> source, DbParameterSettings dbParameterSettings) where KTranslationDataType : new() { var tmpEngine = new DbParameterTranslationEngine(); var initialzedTranslation = InitializedTranslation.CreateInstance(translationExpression.Translation, new List <TranslationEngine> { tmpEngine }); return(tmpEngine.WrapinDbParameter(tmpEngine.FillDataTable(initialzedTranslation, source), dbParameterSettings)); }