public IDataProvider GetDataProvider(string connectionString)
 {
     Load(connectionString);
     return(ProviderHelper.GetDataProvider(Provider.ProviderName, connectionString));
 }
            public void Load(string connectionString)
            {
                if (IsLoaded)
                {
                    return;
                }

                if (LoadException != null)
                {
                    return;
                }

                try
                {
                    var loadLibraries = (Provider.ProviderLibraries?.Split(';') ?? Array <string> .Empty)
                                        .Where(l => !string.IsNullOrEmpty(l))
                                        .Select(l =>
                    {
                        try
                        {
                            return(Assembly.Load(Path.GetFileNameWithoutExtension(l)));
                        }
                        catch (Exception e)
                        {
                            Debug.WriteLine(e.Message);
                            return(null);
                        }
                    }
                                                )
                                        .Where(l => l != null);

                    var providerLibraries = loadLibraries
                                            .Concat(new[] { typeof(DataConnection).Assembly })
                                            .ToArray();


                    var typeName = Provider.InitalizationClassName;
                    if (!string.IsNullOrEmpty(typeName))
                    {
                        var initType = Type.GetType(typeName, true);
                        RuntimeHelpers.RunClassConstructor(initType.TypeHandle);
                    }

                    var provider = ProviderHelper.GetDataProvider(Provider.ProviderName, connectionString);

                    var connectionAssemblies = new List <Assembly> {
                        provider.GetType().Assembly
                    };
                    try
                    {
                        using (var connection = provider.CreateConnection(connectionString))
                        {
                            connectionAssemblies.Add(connection.GetType().Assembly);
                        }
                    }
                    catch
                    {
                    }

                    LoadedAssemblies = connectionAssemblies
                                       .Concat(providerLibraries)
                                       .Distinct().ToArray();

                    IsLoaded = true;
                }
                catch (Exception e)
                {
                    LoadException = e;
                    IsLoaded      = false;
                }
            }