|
17 | 17 | using System.Threading; |
18 | 18 | using ServiceStack.DataAnnotations; |
19 | 19 | using ServiceStack.OrmLite.Converters; |
| 20 | +using ServiceStack.Text; |
20 | 21 |
|
21 | 22 | namespace ServiceStack.OrmLite |
22 | 23 | { |
@@ -51,21 +52,36 @@ internal static ModelDefinition GetModelDefinition(this Type modelType) |
51 | 52 | var modelAliasAttr = modelType.FirstAttribute<AliasAttribute>(); |
52 | 53 | var schemaAttr = modelType.FirstAttribute<SchemaAttribute>(); |
53 | 54 |
|
54 | | - var preCreate = modelType.FirstAttribute<PreCreateTableAttribute>(); |
55 | | - var postCreate = modelType.FirstAttribute<PostCreateTableAttribute>(); |
56 | | - var preDrop = modelType.FirstAttribute<PreDropTableAttribute>(); |
57 | | - var postDrop = modelType.FirstAttribute<PostDropTableAttribute>(); |
| 55 | + var preCreates = modelType.AllAttributes<PreCreateTableAttribute>(); |
| 56 | + var postCreates = modelType.AllAttributes<PostCreateTableAttribute>(); |
| 57 | + var preDrops = modelType.AllAttributes<PreDropTableAttribute>(); |
| 58 | + var postDrops = modelType.AllAttributes<PostDropTableAttribute>(); |
| 59 | + |
| 60 | + string JoinSql(List<string> statements) |
| 61 | + { |
| 62 | + if (statements.Count == 0) |
| 63 | + return null; |
| 64 | + var sb = StringBuilderCache.Allocate(); |
| 65 | + foreach (var sql in statements) |
| 66 | + { |
| 67 | + if (sb.Length > 0) |
| 68 | + sb.AppendLine(";"); |
| 69 | + sb.Append(sql); |
| 70 | + } |
| 71 | + var to = StringBuilderCache.ReturnAndFree(sb); |
| 72 | + return to; |
| 73 | + } |
58 | 74 |
|
59 | 75 | modelDef = new ModelDefinition |
60 | 76 | { |
61 | 77 | ModelType = modelType, |
62 | 78 | Name = modelType.Name, |
63 | 79 | Alias = modelAliasAttr?.Name, |
64 | 80 | Schema = schemaAttr?.Name, |
65 | | - PreCreateTableSql = preCreate?.Sql, |
66 | | - PostCreateTableSql = postCreate?.Sql, |
67 | | - PreDropTableSql = preDrop?.Sql, |
68 | | - PostDropTableSql = postDrop?.Sql, |
| 81 | + PreCreateTableSql = JoinSql(preCreates.Map(x => x.Sql)), |
| 82 | + PostCreateTableSql = JoinSql(postCreates.Map(x => x.Sql)), |
| 83 | + PreDropTableSql = JoinSql(preDrops.Map(x => x.Sql)), |
| 84 | + PostDropTableSql = JoinSql(postDrops.Map(x => x.Sql)), |
69 | 85 | }; |
70 | 86 |
|
71 | 87 | modelDef.CompositeIndexes.AddRange( |
|
0 commit comments