コード例 #1
0
ファイル: Db.cs プロジェクト: IGionny/Molto
 public Db(IDbConnectionProvider dbConnectionProvider, IDbValueConverter dbValueConverter,
           IDataReaderToPoco dataReaderToPoco, ISqlQueryBuilder sqlQueryBuilder)
 {
     _dbConnectionProvider =
         dbConnectionProvider ?? throw new ArgumentNullException(nameof(dbConnectionProvider));
     _dbValueConverter = dbValueConverter ?? throw new ArgumentNullException(nameof(dbValueConverter));
     _dataReaderToPoco = dataReaderToPoco ?? throw new ArgumentNullException(nameof(dataReaderToPoco));
     _sqlQueryBuilder  = sqlQueryBuilder ?? throw new ArgumentNullException(nameof(sqlQueryBuilder));
 }
コード例 #2
0
        /// <summary>
        /// 配置映射的类型。
        /// </summary>
        /// <param name="type"></param>
        /// <param name="dbTypeToMap">类型 type 对应的 DbType。如果是扩展的 DbType,务必对原生的 System.Data.IDataParameter 进行包装,拦截 IDataParameter.DbType 属性的 setter 以对 dbTypeToMap 处理。</param>
        /// <param name="dbValueConverter">指定一个转换器。可为 null。</param>
        public static void Configure(Type type, DbType dbTypeToMap, IDbValueConverter dbValueConverter)
        {
            Utils.CheckNull(type);

            type = type.GetUnderlyingType();
            lock (_lockObj)
            {
                SetItem(_typeInfos, type, dbTypeToMap, dbValueConverter);
            }
        }
コード例 #3
0
        public MappingTypeBuilder HasDbValueConverter(IDbValueConverter dbValueConverter)
        {
            if (dbValueConverter == null)
            {
                throw new ArgumentNullException(nameof(dbValueConverter));
            }

            this._mappingType.DbValueConverter = dbValueConverter;
            return(this);
        }
コード例 #4
0
        public MsSql2014Factory(string connectionString, IEntityMapper entityMapper = null)
        {
            _dbConnectionProvider = new InMemoryDbConnectionProvider();
            _dbConnectionProvider.AddConnectionFactory("default", new MsSql2014ConnectionMaker(connectionString));
            _dbValueConverter          = new StrategiesDbValueConverter();
            _entityDatabaseMapProvider =
                new EntityDatabaseMapProvider(entityMapper ?? new DirectPropertyEntityMapper());
            _dataReaderToPoco = new DataReaderToPoco(_entityDatabaseMapProvider);
            ISqlQueryCutter sqlQueryCutter = new SqlQueryCutter();

            _sqlQueryBuilder = new MsSql2014SqlQueryBuilder(_entityDatabaseMapProvider, sqlQueryCutter);
        }
コード例 #5
0
        public static bool TryGet(Type type, out IDbValueConverter converter)
        {
            var details = TypeDetails.Get(type);

            if (details.IsEnum)
            {
                converter = new EnumConverter();

                return(true);
            }

            return(converters.TryGetValue(details.NonNullType, out converter));
        }
コード例 #6
0
        /// <summary>
        /// 注册一个数据值类型转换器
        /// </summary>
        /// <typeparam name="T">需要转换的类型</typeparam>
        /// <param name="converter">需要注册的转换器</param>
        /// <param name="overwrite">是否覆盖现有的转换器</param>
        public static void Register <T>(IDbValueConverter <T> converter, bool overwrite = false)
        {
            lock ( sync )
            {
                if (!overwrite && ConverterCache <T> .ConverterInstance != null)
                {
                    throw new InvalidOperationException();
                }

                ConverterCache <T> .ConverterInstance = converter;

                convertToMethodDictionary[typeof(T)]   = converter.ConvertValueTo;
                convertFromMethodDictionary[typeof(T)] = (value, dataType) => converter.ConvertValueFrom(value, dataType);
            }
        }
コード例 #7
0
        public void SetColumnConverter(string columnName, IDbValueConverter dbValueConverter)
        {
            if (columnName == null)
            {
                throw new ArgumentNullException(nameof(columnName));
            }

            if (dbValueConverter == null)
            {
                throw new ArgumentNullException(nameof(dbValueConverter));
            }

            if (_dbValueConverters.ContainsKey(columnName))
            {
                _dbValueConverters[columnName] = dbValueConverter;
            }
        }
コード例 #8
0
 internal static void Add <T>(IDbValueConverter converter)
 {
     converters.Add(typeof(T), converter);
 }
コード例 #9
0
 public MRM2(MemberInfo member, IDbValueConverter dbValueConverter)
 {
     this._dbValueConverter = dbValueConverter;
     this._valueSetter      = DelegateGenerator.CreateValueSetter(member);
 }
コード例 #10
0
 static void SetItem(Dictionary <Type, MappingTypeInfo> map, Type type, DbType mapDbType, IDbValueConverter dbValueConverter = null)
 {
     map[type] = new MappingTypeInfo(type, mapDbType, dbValueConverter);
 }
コード例 #11
0
 public MappingTypeInfo(Type type, DbType mapDbType, IDbValueConverter dbValueConverter)
 {
     this.Type             = type;
     this.MapDbType        = mapDbType;
     this.DbValueConverter = dbValueConverter;
 }
コード例 #12
0
        public MappingTypeBuilder HasDbValueConverter <TConverter>() where TConverter : IDbValueConverter
        {
            IDbValueConverter dbValueConverter = Activator.CreateInstance(typeof(TConverter)) as IDbValueConverter;

            return(this.HasDbValueConverter(dbValueConverter));
        }