Repository navigation
Expand file tree
/
Copy pathCreateTableStatementBuilder.cs
More file actions
51 lines (44 loc) · 2.25 KB
/
Copy pathCreateTableStatementBuilder.cs
File metadata and controls
51 lines (44 loc) · 2.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
using System.Collections.Generic;
using System.Data.Entity.Core.Metadata.Edm;
using SQLite.CodeFirst.Builder.NameCreators;
using SQLite.CodeFirst.Statement;
using SQLite.CodeFirst.Utility;
using SQLite.CodeFirst.Extensions;
using System.Linq;
namespace SQLite.CodeFirst.Builder
{
internal class CreateTableStatementBuilder : IStatementBuilder<CreateTableStatement>
{
private readonly EntitySet entitySet;
private readonly AssociationTypeContainer associationTypeContainer;
private readonly Collation defaultCollation;
public CreateTableStatementBuilder(EntitySet entitySet, AssociationTypeContainer associationTypeContainer, Collation defaultCollation)
{
this.entitySet = entitySet;
this.associationTypeContainer = associationTypeContainer;
this.defaultCollation = defaultCollation;
}
public CreateTableStatement BuildStatement()
{
var keyMembers = entitySet.ElementType.KeyMembers.Cast<EdmProperty>().ToArray();
// Only create a CompositePrimaryKeyStatement if there is a composite primary key.
// If there is just one key member this is handled using a constraint.
CompositePrimaryKeyStatement compositePrimaryKeyStatement = null;
if (keyMembers.Length > 1)
{
compositePrimaryKeyStatement = new CompositePrimaryKeyStatementBuilder(keyMembers).BuildStatement();
}
var simpleColumnCollection = new ColumnStatementCollectionBuilder(entitySet.ElementType.Properties, keyMembers, defaultCollation).BuildStatement();
var foreignKeyCollection = new ForeignKeyStatementBuilder(associationTypeContainer.GetAssociationTypes(entitySet.Name)).BuildStatement();
var columnStatements = new List<IStatement>();
columnStatements.AddRange(simpleColumnCollection);
columnStatements.AddIfNotNull(compositePrimaryKeyStatement);
columnStatements.AddRange(foreignKeyCollection);
return new CreateTableStatement
{
TableName = NameCreator.EscapeName(entitySet.Table),
ColumnStatementCollection = new ColumnStatementCollection(columnStatements)
};
}
}
}