Skip to content

Commit d607199

Browse files
committed
Simply escape all input because entity framework, schema and SQLite does not play well together.
See #47 for more information.
1 parent 4f6c7f3 commit d607199

File tree

7 files changed

+11
-37
lines changed

7 files changed

+11
-37
lines changed

SQLite.CodeFirst.Console/FootballDbContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ protected override void OnModelCreating(DbModelBuilder modelBuilder)
2929

3030
private static void ConfigureTeamEntity(DbModelBuilder modelBuilder)
3131
{
32-
modelBuilder.Entity<Team>().ToTable("MyTable", "mySchema")
32+
modelBuilder.Entity<Team>().ToTable("Base.MyTable")
3333
.HasRequired(t => t.Coach)
3434
.WithMany()
3535
.WillCascadeOnDelete(false);

SQLite.CodeFirst/Builder/CreateDatabaseStatementBuilder.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,11 @@ private IEnumerable<CreateTableStatement> GetCreateTableStatements()
3535
IList<AssociationTypeWrapper> associationTypeWrappers = new List<AssociationTypeWrapper>();
3636
foreach (var associationType in associationTypes)
3737
{
38-
string fromSchema = edmModel.Container.GetEntitySetByName(associationType.Constraint.FromRole.Name, true).Schema;
39-
string fromName = edmModel.Container.GetEntitySetByName(associationType.Constraint.FromRole.Name, true).Table;
38+
string fromTable = edmModel.Container.GetEntitySetByName(associationType.Constraint.FromRole.Name, true).Table;
39+
string toTable = edmModel.Container.GetEntitySetByName(associationType.Constraint.ToRole.Name, true).Table;
4040

41-
string toSchema = edmModel.Container.GetEntitySetByName(associationType.Constraint.ToRole.Name, true).Schema;
42-
string toName = edmModel.Container.GetEntitySetByName(associationType.Constraint.ToRole.Name, true).Table;
43-
44-
string fromTableName = TableNameCreator.CreateTableName(fromSchema, fromName);
45-
string toTableName = TableNameCreator.CreateTableName(toSchema, toName);
41+
string fromTableName = TableNameCreator.CreateTableName(fromTable);
42+
string toTableName = TableNameCreator.CreateTableName(toTable);
4643

4744
associationTypeWrappers.Add(new AssociationTypeWrapper
4845
{

SQLite.CodeFirst/Builder/CreateIndexStatementBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public CreateIndexStatementCollection BuildStatement()
4141
{
4242
IsUnique = index.IsUnique,
4343
Name = indexName,
44-
Table = TableNameCreator.CreateTableName(entitySet.Schema, entitySet.Table),
44+
Table = TableNameCreator.CreateTableName(entitySet.Table),
4545
Columns = new Collection<CreateIndexStatement.IndexColumn>()
4646
};
4747
createIndexStatments.Add(indexName, createIndexStatement);

SQLite.CodeFirst/Builder/CreateTableStatementBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public CreateTableStatement BuildStatement()
3131

3232
return new CreateTableStatement
3333
{
34-
TableName = TableNameCreator.CreateTableName(entitySet.Schema, entitySet.Table),
34+
TableName = TableNameCreator.CreateTableName(entitySet.Table),
3535
ColumnStatementCollection = new ColumnStatementCollection(columnStatements)
3636
};
3737
}

SQLite.CodeFirst/Builder/NameCreators/IndexNameCreator.cs

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,8 @@ public static string CreateIndexName(string tableName, string propertyName)
1111
{
1212
// If the tableName is escaped it means that this name contains special chars e.g. a dot (base.myTable)
1313
// Because the tablename is used to build the index name the index name must also be escaped.
14-
bool escaped = tableName.StartsWith(SpecialChars.EscapeCharOpen.ToString()) &&
15-
tableName.EndsWith(SpecialChars.EscapeCharClose.ToString());
16-
1714
tableName = tableName.Trim(SpecialChars.EscapeCharOpen, SpecialChars.EscapeCharClose);
18-
19-
string prefixChar = String.Empty;
20-
string postfixChar = String.Empty;
21-
if (escaped)
22-
{
23-
prefixChar = SpecialChars.EscapeCharOpen.ToString();
24-
postfixChar = SpecialChars.EscapeCharClose.ToString();
25-
}
26-
27-
return String.Format(CultureInfo.InvariantCulture, "{0}{1}{2}_{3}{4}", prefixChar, IndexNamePrefix, tableName, propertyName, postfixChar);
15+
return String.Format(CultureInfo.InvariantCulture, "{0}{1}{2}_{3}{4}", SpecialChars.EscapeCharOpen, IndexNamePrefix, tableName, propertyName, SpecialChars.EscapeCharClose);
2816
}
2917
}
3018
}

SQLite.CodeFirst/Builder/NameCreators/TableNameCreator.cs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,9 @@ namespace SQLite.CodeFirst.Builder.NameCreators
55
{
66
internal static class TableNameCreator
77
{
8-
public static string CreateTableName(string entityName)
8+
public static string CreateTableName(string tableFromEntitySet)
99
{
10-
return CreateTableName(null, entityName);
11-
}
12-
13-
public static string CreateTableName(string schema, string entityName)
14-
{
15-
if (!String.IsNullOrWhiteSpace(schema) && schema != "dbo")
16-
{
17-
return String.Format(CultureInfo.InvariantCulture, "{0}{1}.{2}{3}", SpecialChars.EscapeCharOpen, schema, entityName, SpecialChars.EscapeCharClose);
18-
}
19-
20-
return entityName;
10+
return String.Format(CultureInfo.InvariantCulture, "{0}{1}{2}", SpecialChars.EscapeCharOpen, tableFromEntitySet, SpecialChars.EscapeCharClose);
2111
}
2212
}
2313
}

SQLite.CodeFirst/Extensions/EntityTypeExtension.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,9 @@ public static string GetTableName(this EntityType entityType)
2424
Type metadataPropertyValueType = metadataProperty.Value.GetType();
2525

2626
// The type DatabaseName is internal. So we need reflection...
27-
var schema = (string)metadataPropertyValueType.GetProperty("Schema").GetValue(metadataPropertyValue);
2827
var name = (string)metadataPropertyValueType.GetProperty("Name").GetValue(metadataPropertyValue);
2928

30-
return TableNameCreator.CreateTableName(schema, name);
29+
return TableNameCreator.CreateTableName(name);
3130
}
3231
}
3332
}

0 commit comments

Comments
 (0)