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) ...@@ -73,7 +73,7 @@ public int Update(TId id, dynamic data)
List<string> paramNames = GetParamNames((object)data); List<string> paramNames = GetParamNames((object)data);
var builder = new StringBuilder(); 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.AppendLine(string.Join(",", paramNames.Where(n => n != "Id").Select(p => p + "= @" + p)));
builder.Append("where Id = @Id"); builder.Append("where Id = @Id");
...@@ -247,7 +247,7 @@ private string DetermineTableName<T>(string likelyTableName) ...@@ -247,7 +247,7 @@ private string DetermineTableName<T>(string likelyTableName)
name = likelyTableName; name = likelyTableName;
if (!TableExists(name)) if (!TableExists(name))
{ {
name = typeof(T).Name; name = "[" + typeof(T).Name + "]";
} }
tableNameMap[typeof(T)] = name; tableNameMap[typeof(T)] = name;
...@@ -257,7 +257,26 @@ private string DetermineTableName<T>(string likelyTableName) ...@@ -257,7 +257,26 @@ private string DetermineTableName<T>(string likelyTableName)
private bool TableExists(string name) 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) public int Execute(string sql, dynamic param = null)
......
...@@ -410,13 +410,18 @@ static SqlMapper() ...@@ -410,13 +410,18 @@ static SqlMapper()
typeMap[typeof(Object)] = DbType.Object; 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 const string LinqBinary = "System.Data.Linq.Binary";
internal static DbType LookupDbType(Type type, string name) internal static DbType LookupDbType(Type type, string name)
{ {
DbType dbType; DbType dbType;
var nullUnderlyingType = Nullable.GetUnderlyingType(type); var nullUnderlyingType = Nullable.GetUnderlyingType(type);
if (nullUnderlyingType != null) type = nullUnderlyingType; if (nullUnderlyingType != null) type = nullUnderlyingType;
if (type.IsEnum) if (type.IsEnum && !typeMap.ContainsKey(type))
{ {
type = Enum.GetUnderlyingType(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