Commit 86d6454a authored by Sam's avatar Sam

Merge pull request #63 from seburgi/master

Added database schema support to Dapper.Rainbow
parents a91bf721 6ef748ab
......@@ -73,7 +73,7 @@ public int Update(TId id, dynamic data)
List<string> paramNames = GetParamNames((object)data);
var builder = new StringBuilder();
builder.Append("update [").Append(TableName).Append("] set ");
builder.Append("update ").Append(TableName).Append(" set ");
builder.AppendLine(string.Join(",", paramNames.Where(n => n != "Id").Select(p => p + "= @" + p)));
builder.Append("where Id = @Id");
......@@ -247,7 +247,7 @@ private string DetermineTableName<T>(string likelyTableName)
name = likelyTableName;
if (!TableExists(name))
{
name = typeof(T).Name;
name = "[" + typeof(T).Name + "]";
}
tableNameMap[typeof(T)] = name;
......@@ -257,7 +257,26 @@ private string DetermineTableName<T>(string likelyTableName)
private bool TableExists(string name)
{
return connection.Query("select 1 from INFORMATION_SCHEMA.TABLES where TABLE_NAME = @name", new { name }, transaction: transaction).Count() == 1;
string schemaName = null;
name = name.Replace("[", "");
name = name.Replace("]", "");
if(name.Contains("."))
{
var parts = name.Split('.');
if (parts.Count() == 2)
{
schemaName = parts[0];
name = parts[1];
}
}
var builder = new StringBuilder("select 1 from INFORMATION_SCHEMA.TABLES where ");
if (!String.IsNullOrEmpty(schemaName)) builder.Append("TABLE_SCHEMA = @schemaName AND ");
builder.Append("TABLE_NAME = @name");
return connection.Query(builder.ToString(), new { schemaName, name }, transaction: transaction).Count() == 1;
}
public int Execute(string sql, dynamic param = null)
......
......@@ -410,13 +410,18 @@ static SqlMapper()
typeMap[typeof(Object)] = DbType.Object;
}
public static void AddTypeMap(Type type, DbType dbType)
{
typeMap[type] = dbType;
}
internal const string LinqBinary = "System.Data.Linq.Binary";
internal static DbType LookupDbType(Type type, string name)
{
DbType dbType;
var nullUnderlyingType = Nullable.GetUnderlyingType(type);
if (nullUnderlyingType != null) type = nullUnderlyingType;
if (type.IsEnum)
if (type.IsEnum && !typeMap.ContainsKey(type))
{
type = Enum.GetUnderlyingType(type);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment