using DbLinq.Factory;\r
using DbLinq.Schema;\r
using DbLinq.Schema.Dbml;\r
+using System.Text.RegularExpressions;\r
\r
namespace DbLinq.Vendor.Implementation\r
{\r
-#if MONO_STRICT\r
- internal\r
-#else\r
+#if !MONO_STRICT\r
public\r
#endif\r
abstract partial class SchemaLoader : ISchemaLoader\r
/// Underlying vendor\r
/// </summary>\r
/// <value></value>\r
- public abstract IVendor Vendor { get; }\r
- /// <summary>\r
- /// Vendor typed DataContext type\r
- /// </summary>\r
- /// <value></value>\r
- public abstract System.Type DataContextType { get; }\r
+ public abstract IVendor Vendor { get; set; }\r
/// <summary>\r
/// Connection used to read schema\r
/// </summary>\r
if (string.IsNullOrEmpty(databaseName))\r
throw new ArgumentException("A database name is required. Please specify /database=<databaseName>");\r
\r
- databaseName = GetDatabaseName(databaseName);\r
+ databaseName = GetDatabaseNameAliased(databaseName, nameAliases);\r
\r
var schemaName = NameFormatter.GetSchemaName(databaseName, GetExtraction(databaseName), nameFormat);\r
var names = new Names();\r
var schema = new Database\r
{\r
Name = schemaName.DbName,\r
- Class = schemaName.ClassName,\r
+ Class = GetRuntimeClassName(schemaName.ClassName, nameAliases),\r
BaseType = typeof(DataContext).FullName,\r
ContextNamespace = contextNamespace,\r
EntityNamespace = entityNamespace,\r
//CheckNamesSafety(schema);\r
\r
// generate backing fields name (since we have here correct names)\r
- GenerateStorageFields(schema);\r
+ GenerateStorageAndMemberFields(schema);\r
\r
return schema;\r
}\r
return databaseName;\r
}\r
\r
+ protected virtual string GetDatabaseNameAliased(string databaseName, INameAliases nameAliases)\r
+ {\r
+ string databaseNameAliased = nameAliases != null ? nameAliases.GetDatabaseNameAlias(databaseName) : null;\r
+ return (databaseNameAliased != null) ? databaseNameAliased : GetDatabaseName(databaseName);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets a usable name for the database class.\r
+ /// </summary>\r
+ /// <param name="databaseName">Name of the clas.</param>\r
+ /// <returns></returns>\r
+ protected virtual string GetRuntimeClassName(string className, INameAliases nameAliases)\r
+ {\r
+ string classNameAliased = nameAliases != null ? nameAliases.GetClassNameAlias(className) : null;\r
+ return (classNameAliased != null) ? classNameAliased : className;\r
+ }\r
+\r
/// <summary>\r
/// Writes an error line.\r
/// </summary>\r
return CreateTableName(dbTableName, dbSchema, nameAliases, nameFormat, GetExtraction(dbTableName));\r
}\r
\r
+ Regex startsWithNumber = new Regex(@"^\d", RegexOptions.Compiled);\r
+\r
/// <summary>\r
/// Creates the name of the column.\r
/// </summary>\r
var tableName = CreateTableName(dbTableName, dbSchema, nameAliases, nameFormat);\r
if (columnName.PropertyName == tableName.ClassName)\r
columnName.PropertyName = columnName.PropertyName + "1";\r
+\r
+ if (startsWithNumber.IsMatch(columnName.PropertyName))\r
+ columnName.PropertyName = "_" + columnName.PropertyName;\r
+\r
columnName.DbName = dbColumnName;\r
return columnName;\r
}\r
if (columnRow.PrimaryKey.HasValue)\r
column.IsPrimaryKey = columnRow.PrimaryKey.Value;\r
\r
- if (columnRow.Generated.HasValue)\r
- column.IsDbGenerated = columnRow.Generated.Value;\r
+ bool? generated = (nameAliases != null) ? nameAliases.GetColumnGenerated(columnRow.ColumnName, columnRow.TableName, columnRow.TableSchema) : null;\r
+ if (!generated.HasValue)\r
+ generated = columnRow.Generated;\r
+ if (generated.HasValue)\r
+ column.IsDbGenerated = generated.Value;\r
+\r
+ AutoSync? autoSync = (nameAliases != null) ? nameAliases.GetColumnAutoSync(columnRow.ColumnName, columnRow.TableName, columnRow.TableSchema) : null;\r
+ if (autoSync.HasValue)\r
+ column.AutoSync = autoSync.Value;\r
\r
// the Expression can originate from two sources:\r
// 1. DefaultValue\r
\r
column.CanBeNull = columnRow.Nullable;\r
\r
+ string columnTypeAlias = nameAliases != null ? nameAliases.GetColumnForcedType(columnRow.ColumnName, columnRow.TableName, columnRow.TableSchema) : null;\r
var columnType = MapDbType(columnName.DbName, columnRow);\r
\r
var columnEnumType = columnType as EnumType;\r
enumType[enumValue.Key] = enumValue.Value;\r
}\r
}\r
+ else if (columnTypeAlias != null)\r
+ column.Type = columnTypeAlias;\r
else\r
column.Type = columnType.ToString();\r
\r