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

Commit 04e2cc5

Browse files
committed
fix AutoIncrement issues with SQL Server 2012
1 parent 2b7e948 commit 04e2cc5

File tree

3 files changed

+19
-18
lines changed

3 files changed

+19
-18
lines changed

src/ServiceStack.OrmLite.SqlServer/SqlServer2012OrmLiteDialectProvider.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,17 @@ public override bool DoesSequenceExist(IDbCommand dbCmd, string sequenceName)
2525

2626
protected override string GetAutoIncrementDefinition(FieldDefinition fieldDef)
2727
{
28-
if (fieldDef.AutoIncrement && !string.IsNullOrEmpty(fieldDef.Sequence))
28+
if (!string.IsNullOrEmpty(fieldDef.Sequence))
2929
return $"DEFAULT NEXT VALUE FOR {Sequence(NamingStrategy.GetSchemaName(GetModel(fieldDef.PropertyInfo?.ReflectedType)), fieldDef.Sequence)}";
3030
else
3131
return AutoIncrementDefinition;
3232
}
3333

34-
protected override bool ShouldSkipInsert(FieldDefinition fieldDef) => fieldDef.ShouldSkipInsert() && !fieldDef.AutoIncrement && string.IsNullOrEmpty(fieldDef.Sequence);
34+
protected override bool ShouldSkipInsert(FieldDefinition fieldDef) =>
35+
fieldDef.ShouldSkipInsert() && string.IsNullOrEmpty(fieldDef.Sequence);
3536

36-
protected override bool SupportsSequences(FieldDefinition fieldDef) => fieldDef.AutoIncrement || !string.IsNullOrEmpty(fieldDef.Sequence);
37+
protected override bool SupportsSequences(FieldDefinition fieldDef) =>
38+
!string.IsNullOrEmpty(fieldDef.Sequence);
3739

3840
public override List<string> ToCreateSequenceStatements(Type tableType)
3941
{

src/ServiceStack.OrmLite.SqlServer/SqlServerOrmLiteDialectProvider.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,8 @@ protected string Sequence(string schema, string sequence)
313313
protected virtual bool ShouldReturnOnInsert(ModelDefinition modelDef, FieldDefinition fieldDef) =>
314314
fieldDef.ReturnOnInsert || (fieldDef.IsPrimaryKey && fieldDef.AutoIncrement && modelDef.HasReturnAttribute);
315315

316-
protected virtual bool ShouldSkipInsert(FieldDefinition fieldDef) => fieldDef.ShouldSkipInsert();
316+
protected virtual bool ShouldSkipInsert(FieldDefinition fieldDef) =>
317+
fieldDef.ShouldSkipInsert();
317318

318319
protected virtual bool SupportsSequences(FieldDefinition fieldDef) => false;
319320

src/ServiceStack.OrmLite/OrmLiteWriteCommandExtensions.cs

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -645,33 +645,31 @@ internal static long Insert<T>(this IDbCommand dbCmd, T obj, Action<IDbCommand>
645645
if (modelDef.HasReturnAttribute)
646646
{
647647
using (var reader = dbCmd.ExecReader(dbCmd.CommandText))
648+
using (reader)
648649
{
649-
using (reader)
650+
if (reader.Read())
650651
{
651-
if (reader.Read())
652+
var values = new object[reader.FieldCount];
653+
var indexCache = reader.GetIndexFieldsCache(ModelDefinition<T>.Definition, dialectProvider);
654+
obj.PopulateWithSqlReader(dialectProvider, reader, indexCache, values);
655+
if ((modelDef.PrimaryKey != null) && modelDef.PrimaryKey.AutoIncrement)
652656
{
653-
var values = new object[reader.FieldCount];
654-
var indexCache = reader.GetIndexFieldsCache(ModelDefinition<T>.Definition, dialectProvider);
655-
obj.PopulateWithSqlReader(dialectProvider, reader, indexCache, values);
656-
if ((modelDef.PrimaryKey != null) && modelDef.PrimaryKey.AutoIncrement)
657-
{
658-
var id = modelDef.GetPrimaryKey(obj);
659-
return Convert.ToInt64(id);
660-
}
657+
var id = modelDef.GetPrimaryKey(obj);
658+
return Convert.ToInt64(id);
661659
}
662-
return 0;
663660
}
661+
return 0;
664662
}
665663
}
666-
else
664+
667665
if (selectIdentity)
668666
{
669667
dbCmd.CommandText += dialectProvider.GetLastInsertIdSqlSuffix<T>();
670668

671669
return dbCmd.ExecLongScalar();
672670
}
673-
else
674-
return dbCmd.ExecNonQuery();
671+
672+
return dbCmd.ExecNonQuery();
675673
}
676674

677675
internal static void Insert<T>(this IDbCommand dbCmd, Action<IDbCommand> commandFilter, params T[] objs)

0 commit comments

Comments
 (0)