Enum as string PK on concurrency check fails in SELECT statement

When using Enum as PK in a RowVersioned table, the SELECT statement to check RowVersion fails because of INT to STRING conversion:

"SELECT \"RowVersion\" FROM \"TypeWithEnumAsStringAsPk\" WHERE \"Id\" = @0"

Repro:

using System.Linq;
using NUnit.Framework;
using ServiceStack.DataAnnotations;

namespace ServiceStack.OrmLite.SqlServerTests
{
	public class EnumTests : OrmLiteTestBase
	{

		[Test]
		public void CanUseRowVersionOnEnumAsStringAsPk()
		{
			using (var con = OpenDbConnection())
			{

				con.CreateTable<TypeWithEnumAsStringAsPk>(true);

				// works
				con.Insert(new TypeWithEnumAsStringAsPk { Id = SomeEnum.Value_1 });

				// fails
				con.Save(new TypeWithEnumAsStringAsPk { Id = SomeEnum.Value2 });
			}
		}
	}

	public enum SomeEnum
	{
		Value_1,
		Value2,
		Value3
	}

	public class TypeWithEnumAsStringAsPk
	{
		[PrimaryKey]
		public SomeEnum Id { get; set; }

		[Default(typeof(bool), "0")]
		public bool IsDeleted { get; set; }


		[RowVersion]
		public byte[] RowVersion { get; set; }

	}

	
}

Should now be resolved from this commit available from v5.0.3 which is now on MyGet.

1 Like