Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 499cbb1

Browse files
committed
Add OrmLiteConfig.SkipForeignKeys option to create tables without FK constraints
1 parent a74f018 commit 499cbb1

File tree

8 files changed

+51
-18
lines changed

8 files changed

+51
-18
lines changed

src/ServiceStack.OrmLite.Firebird/FirebirdOrmLiteDialectProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ public override string ToCreateTableStatement(Type tableType)
317317

318318
sbColumns.Append(columnDefinition);
319319

320-
if (fieldDef.ForeignKey == null)
320+
if (fieldDef.ForeignKey == null || OrmLiteConfig.SkipForeignKeys)
321321
continue;
322322

323323
var refModelDef = GetModel(fieldDef.ForeignKey.ReferenceType);

src/ServiceStack.OrmLite.MySql/MySqlDialectProvider.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,8 @@ public override string ToCreateTableStatement(Type tableType)
166166

167167
sbColumns.Append(GetColumnDefinition(fieldDef));
168168

169-
if (fieldDef.ForeignKey == null) continue;
169+
if (fieldDef.ForeignKey == null || OrmLiteConfig.SkipForeignKeys)
170+
continue;
170171

171172
var refModelDef = GetModel(fieldDef.ForeignKey.ReferenceType);
172173
sbConstraints.AppendFormat(

src/ServiceStack.OrmLite.Oracle/OracleOrmLiteDialectProvider.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -802,7 +802,8 @@ public override string ToCreateTableStatement(Type tableType)
802802

803803
sbColumns.Append(columnDefinition);
804804

805-
if (fieldDef.ForeignKey == null) continue;
805+
if (fieldDef.ForeignKey == null || OrmLiteConfig.SkipForeignKeys)
806+
continue;
806807

807808
var refModelDef = GetModel(fieldDef.ForeignKey.ReferenceType);
808809
sbConstraints.AppendFormat(

src/ServiceStack.OrmLite.SqlServer/SqlServer2014OrmLiteDialectProvider.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace ServiceStack.OrmLite.SqlServer
88
{
99
public class SqlServer2014OrmLiteDialectProvider : SqlServer2012OrmLiteDialectProvider
1010
{
11-
public static new SqlServer2014OrmLiteDialectProvider Instance = new SqlServer2014OrmLiteDialectProvider();
11+
public new static SqlServer2014OrmLiteDialectProvider Instance = new SqlServer2014OrmLiteDialectProvider();
1212

1313
public override string ToCreateTableStatement(Type tableType)
1414
{
@@ -61,7 +61,8 @@ public override string ToCreateTableStatement(Type tableType)
6161

6262
sbColumns.Append(columnDefinition);
6363

64-
if (fieldDef.ForeignKey == null) continue;
64+
if (fieldDef.ForeignKey == null || OrmLiteConfig.SkipForeignKeys)
65+
continue;
6566

6667
var refModelDef = OrmLiteUtils.GetModelDefinition(fieldDef.ForeignKey.ReferenceType);
6768
sbConstraints.Append(

src/ServiceStack.OrmLite.VistaDB/VistaDbDialectProvider.cs

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -146,18 +146,19 @@ public override string ToCreateTableStatement(Type tableType)
146146
this.GetQuotedName("PK_" + modelDefinition.ModelName),
147147
this.GetQuotedColumnName(fieldDef.FieldName));
148148
}
149-
else if (fieldDef.ForeignKey != null)
150-
{
151-
var foreignModelDefinition = OrmLiteUtils.GetModelDefinition(fieldDef.ForeignKey.ReferenceType);
152-
constraints.AppendFormat("ALTER TABLE {0} ADD CONSTRAINT {1} FOREIGN KEY ({2}) REFERENCES {3} ({4}){5}{6};\n",
153-
quotedTableName,
154-
this.GetQuotedName(fieldDef.ForeignKey.GetForeignKeyName(modelDefinition, foreignModelDefinition, this.NamingStrategy, fieldDef)),
155-
this.GetQuotedColumnName(fieldDef.FieldName),
156-
this.GetQuotedTableName(foreignModelDefinition),
157-
this.GetQuotedColumnName(foreignModelDefinition.PrimaryKey.FieldName),
158-
this.GetForeignKeyOnDeleteClause(fieldDef.ForeignKey),
159-
this.GetForeignKeyOnUpdateClause(fieldDef.ForeignKey));
160-
}
149+
150+
if (fieldDef.ForeignKey == null || OrmLiteConfig.SkipForeignKeys)
151+
continue;
152+
153+
var foreignModelDefinition = OrmLiteUtils.GetModelDefinition(fieldDef.ForeignKey.ReferenceType);
154+
constraints.AppendFormat("ALTER TABLE {0} ADD CONSTRAINT {1} FOREIGN KEY ({2}) REFERENCES {3} ({4}){5}{6};\n",
155+
quotedTableName,
156+
this.GetQuotedName(fieldDef.ForeignKey.GetForeignKeyName(modelDefinition, foreignModelDefinition, this.NamingStrategy, fieldDef)),
157+
this.GetQuotedColumnName(fieldDef.FieldName),
158+
this.GetQuotedTableName(foreignModelDefinition),
159+
this.GetQuotedColumnName(foreignModelDefinition.PrimaryKey.FieldName),
160+
this.GetForeignKeyOnDeleteClause(fieldDef.ForeignKey),
161+
this.GetForeignKeyOnUpdateClause(fieldDef.ForeignKey));
161162
}
162163

163164
return string.Format("CREATE TABLE {0} \n(\n {1} \n); \n {2}\n",

src/ServiceStack.OrmLite/OrmLiteConfig.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,8 @@ public static IOrmLiteExecFilter ExecFilter
194194

195195
public static bool DeoptimizeReader { get; set; }
196196

197+
public static bool SkipForeignKeys { get; set; }
198+
197199
public static Func<string, string> ParamNameFilter { get; set; }
198200
}
199201
}

src/ServiceStack.OrmLite/OrmLiteDialectProviderBase.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1200,7 +1200,8 @@ public virtual string ToCreateTableStatement(Type tableType)
12001200

12011201
sbColumns.Append(columnDefinition);
12021202

1203-
if (fieldDef.ForeignKey == null) continue;
1203+
if (fieldDef.ForeignKey == null || OrmLiteConfig.SkipForeignKeys)
1204+
continue;
12041205

12051206
var refModelDef = fieldDef.ForeignKey.ReferenceType.GetModelDefinition();
12061207
sbConstraints.Append(

tests/ServiceStack.OrmLite.Tests/ForeignKeyAttributeTests.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using NUnit.Framework;
22
using ServiceStack.DataAnnotations;
3+
using ServiceStack.Logging;
4+
using ServiceStack.Text;
35

46
namespace ServiceStack.OrmLite.Tests
57
{
@@ -119,6 +121,30 @@ public void CanCreateForeignWithOnDeleteSetNull()
119121
dbConn.DropAndCreateTable<TypeWithOnDeleteSetNull>();
120122
}
121123
}
124+
125+
[Test]
126+
public void Can_Skip_creating_ForeignKeys()
127+
{
128+
OrmLiteConfig.SkipForeignKeys = true;
129+
130+
using (var db = OpenDbConnection())
131+
{
132+
db.DropTable<TypeWithOnDeleteCascade>();
133+
db.DropTable<ReferencedType>();
134+
db.CreateTable<ReferencedType>();
135+
db.CreateTable<TypeWithOnDeleteCascade>();
136+
137+
db.Save(new ReferencedType { Id = 1 });
138+
db.Save(new TypeWithOnDeleteCascade { RefId = 1 });
139+
140+
db.Delete<ReferencedType>(r => r.Id == 1);
141+
142+
Assert.That(db.Select<ReferencedType>().Count, Is.EqualTo(0));
143+
Assert.That(db.Select<TypeWithOnDeleteCascade>().Count, Is.EqualTo(1));
144+
}
145+
146+
OrmLiteConfig.SkipForeignKeys = false;
147+
}
122148
}
123149

124150
public class ReferencedType

0 commit comments

Comments
 (0)