コード例 #1
0
        public DbProviderFactory GetProviderFactory(DbConnection connection)
        {
            Check.NotNull(connection, "connection");

#if NET40
            var connectionType = connection.GetType();

            return _cache.GetOrAdd(
                connectionType,
                t =>
                    {
                        var row = _finder.FindRow(t, r => ExactMatch(r, t))
                                  ?? _finder.FindRow(null, r => ExactMatch(r, t))
                                  ?? _finder.FindRow(t, r => AssignableMatch(r, t))
                                  ?? _finder.FindRow(null, r => AssignableMatch(r, t));

                        if (row == null)
                        {
                            throw new NotSupportedException(Strings.ProviderNotFound(connection.ToString()));
                        }

                        return DbProviderFactories.GetFactory(row);
                    });
#else
            return DbProviderFactories.GetFactory(connection);
#endif
        }
        public DbProviderFactory GetProviderFactory(DbConnection connection, IEnumerable<DataRow> dataRows)
        {
            DebugCheck.NotNull(connection);
            DebugCheck.NotNull(dataRows);

            var connectionType = connection.GetType();

            return _cache.GetOrAdd(
                connectionType,
                t =>
                    {
                        var row = _finder.FindRow(t, r => ExactMatch(r, t), dataRows)
                                  ?? _finder.FindRow(null, r => ExactMatch(r, t), dataRows)
                                  ?? _finder.FindRow(t, r => AssignableMatch(r, t), dataRows)
                                  ?? _finder.FindRow(null, r => AssignableMatch(r, t), dataRows);

                        if (row == null)
                        {
                            throw new NotSupportedException(Strings.ProviderNotFound(connection.ToString()));
                        }

                        return DbProviderFactories.GetFactory(row);
                    });
        }