|
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