internal static bool CheckProviderCompatibility <TOid>(IDbConnection connection,
                                                               IGeometryFactory geometryFactory,
                                                               string schema,
                                                               string tableName,
                                                               FeatureDataTable model,
                                                               out MsSqlServer2008Provider <TOid> provider)
        {
            MsSqlServer2008Provider <TOid> p = new MsSqlServer2008Provider <TOid>(geometryFactory,
                                                                                  connection.ConnectionString,
                                                                                  schema,
                                                                                  tableName,
                                                                                  model.PrimaryKey[0].ColumnName,
                                                                                  "Geom");

            FeatureDataTable fdt = p.CreateNewTable();

            if (FeatureDataTableModelIsCompatible(fdt, model))
            {
                provider = p;
                return(true);
            }

            provider = null;
            return(false);
        }
        internal static MsSqlServer2008Provider <TOid> Create <TOid>(string connectionString,
                                                                     IGeometryFactory geometryFactory,
                                                                     string schema,
                                                                     string tableName,
                                                                     FeatureDataTable model)
        {
            using (IDbConnection conn = new SqlServerDbUtility().CreateConnection(connectionString))
            {
                //using (IDbTransaction tran = conn.BeginTransaction())
                //{
                //    try
                //    {
                if (!EnsureDbIsSpatiallyEnabled(conn))
                {
                    throw new InvalidDatabaseConfigurationException(
                              "Database does not contain spatial components.");
                }

                if (CheckIfObjectExists(conn, schema, tableName))
                {
                    MsSqlServer2008Provider <TOid> provider;
                    if (CheckProviderCompatibility(conn, geometryFactory, schema, tableName, model, out provider))
                    {
                        return(provider);
                    }

                    throw new IncompatibleSchemaException(
                              "The table already exists in the database but has an incompatible schema.");
                }
                string oidColumn, geometryColumn;
                CreateDatabaseObjects(conn, schema, tableName, model, out oidColumn, out geometryColumn);

                MsSqlServer2008Provider <TOid> prov = new MsSqlServer2008Provider <TOid>(geometryFactory,
                                                                                         connectionString, schema,
                                                                                         tableName, oidColumn,
                                                                                         geometryColumn);


                //    tran.Commit();
                return(prov);
                //}
                //catch
                //{
                //    tran.Rollback();
                //    throw;
                //}
                //}
            }
        }