diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH3426/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH3426/Fixture.cs index a762cbef796..cb86ae55216 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH3426/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH3426/Fixture.cs @@ -84,5 +84,18 @@ public async Task WhereGuidToStringAsync() Assert.That(list, Has.Count.EqualTo(1)); } } + + [Test] + public async Task CompareStringColumnWithGuidToStringAsync() + { + using (var session = OpenSession()) + { + var list = await (session.Query() + .Where(x => x.Id.ToString() == x.Name) + .ToListAsync()); + + Assert.That(list, Has.Count.EqualTo(0)); + } + } } } diff --git a/src/NHibernate.Test/NHSpecificTest/NH3426/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/NH3426/Fixture.cs index 06ac532dea1..04ffc0fdb6b 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH3426/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH3426/Fixture.cs @@ -72,5 +72,18 @@ public void WhereGuidToString() Assert.That(list, Has.Count.EqualTo(1)); } } + + [Test] + public void CompareStringColumnWithGuidToString() + { + using (var session = OpenSession()) + { + var list = session.Query() + .Where(x => x.Id.ToString() == x.Name) + .ToList(); + + Assert.That(list, Has.Count.EqualTo(0)); + } + } } } diff --git a/src/NHibernate/Dialect/MsSql2000Dialect.cs b/src/NHibernate/Dialect/MsSql2000Dialect.cs index 73d6a2a7108..dbe3db7407e 100644 --- a/src/NHibernate/Dialect/MsSql2000Dialect.cs +++ b/src/NHibernate/Dialect/MsSql2000Dialect.cs @@ -352,6 +352,7 @@ protected virtual void RegisterFunctions() // Casting to CHAR (without specified length) truncates to 30 characters. // A longer version would be safer, but 50 is enough to prevent errors when casting uniqueidentifer to a string representation (NH-2858) RegisterFunction("str", new SQLFunctionTemplate(NHibernateUtil.String, "cast(?1 as nvarchar(50))")); + RegisterFunction("strguid", new SQLFunctionTemplate(NHibernateUtil.String, "cast(?1 as char(36))")); RegisterFunction("substring", new EmulatedLengthSubstringFunction()); diff --git a/src/NHibernate/Dialect/MsSqlCeDialect.cs b/src/NHibernate/Dialect/MsSqlCeDialect.cs index 86407ba2530..90da41cf9bb 100644 --- a/src/NHibernate/Dialect/MsSqlCeDialect.cs +++ b/src/NHibernate/Dialect/MsSqlCeDialect.cs @@ -170,6 +170,7 @@ protected virtual void RegisterFunctions() { RegisterFunction("substring", new EmulatedLengthSubstringFunction()); RegisterFunction("str", new SQLFunctionTemplate(NHibernateUtil.String, "cast(?1 as nvarchar)")); + RegisterFunction("strguid", new SQLFunctionTemplate(NHibernateUtil.String, "cast(?1 as nvarchar)")); RegisterFunction("current_timestamp", new NoArgSQLFunction("getdate", NHibernateUtil.DateTime, true)); RegisterFunction("date", new SQLFunctionTemplate(NHibernateUtil.DateTime, "dateadd(dd, 0, datediff(dd, 0, ?1))"));