Uploaded image for project: 'NHibernate'
  1. NHibernate
  2. NH-2789

LINQ query on byte? simple property fails on MSSQL 2005 (tinyint)

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 3.1.0, 3.2.0.CR1
    • Fix Version/s: 3.3.1.GA
    • Component/s: Linq Provider
    • Labels:
      None

      Description

      Using the NH 3.1 LINQ Provider (also 3.2.0CR1), i get failing errors when including a nullable byte property in a query.

      Test
      public void LinqQueryOnNullableByteShouldWork()
      {
      using (ISession session = this.OpenSession())

      { // DomainClass entity = session.Get<DomainClass>(1); // try LINQ join on byte property var entityQueryable = from x in session.Query<DomainClass>() where x.NullableByteProperty == Convert.ToByte(16) select x; Assert.IsTrue(entityQueryable.Count() == 1); }

      }

      The generated SQL seems right, but the exception thrown is:
      System.InvalidCastException : Specified cast is not valid.

      When i try ICritera, it works (i'm using mostly LINQ provider).

      I am using MS SQL 2005 (sqlexpress and regular server). tinyint is the backing datatype.
      .NET Framework 4.0 , Visual Studio 2010.

      I will submit a failing test.

      HBM mappings (originally i use Fluent NHibernate)

      <?xml version="1.0" encoding="utf-8" ?>
      <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernate.Test"
      namespace="NHibernate.Test.NHSpecificTest.NH1234"
      default-access="property" auto-import="true" default-cascade="none" default-lazy="true">
      <class name="DomainClass">
      <id name="Id" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="id" />
      <generator class="assigned" />
      </id>
      <property name="NullableByteProperty" type="System.Nullable`1[System.Byte, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="nullable_byte_property" />
      </property>
      <property name="NullableIntProperty" type="System.Nullable`1[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="nullable_Int_property" />
      </property>
      </class>
      </hibernate-mapping>

        Gliffy Diagrams

          Issue Links

            Activity

            Hide
            raulg Raul Nohea Goodness added a comment -

            Contains failing test for byte? (also passing test w/int?), per the recommended NH/nunit project.

            NH2789/
            DomainClass.cs
            Mappings.hbm.xml
            SampleTest.cs

            Show
            raulg Raul Nohea Goodness added a comment - Contains failing test for byte? (also passing test w/int?), per the recommended NH/nunit project. NH2789/ DomainClass.cs Mappings.hbm.xml SampleTest.cs
            Hide
            patearl Patrick Earl added a comment -

            Thanks for the good test. The basic problem is that the MS Linq expression maker turns this:
            x.NullableByteProeprty == Convert.ToByte(16)
            into something like this:
            (int?)x.NullableByteProeprty == (int?)(int)Convert.ToByte(16)

            I don't know why it does this, nor do I have a great solution up my sleeve at the moment.

            Show
            patearl Patrick Earl added a comment - Thanks for the good test. The basic problem is that the MS Linq expression maker turns this: x.NullableByteProeprty == Convert.ToByte(16) into something like this: (int?)x.NullableByteProeprty == (int?)(int)Convert.ToByte(16) I don't know why it does this, nor do I have a great solution up my sleeve at the moment.
            Hide
            raulg Raul Nohea Goodness added a comment -

            Thanks, that's too bad if its in the MS LINQ code.

            Looks like i will be able to do a workaround-- use int? on my POCO class property, and keep the tinyint datatype on the MS SQL table schema.

            Show
            raulg Raul Nohea Goodness added a comment - Thanks, that's too bad if its in the MS LINQ code. Looks like i will be able to do a workaround-- use int? on my POCO class property, and keep the tinyint datatype on the MS SQL table schema.
            Hide
            hazzik Alexander Zaytsev added a comment -

            Fixed in 3.3.x eda55d7d0aec86b90b9d38c4ecec1384832cfe8c

            Show
            hazzik Alexander Zaytsev added a comment - Fixed in 3.3.x eda55d7d0aec86b90b9d38c4ecec1384832cfe8c
            Hide
            hazzik Alexander Zaytsev added a comment -

            Closed after NH 3.3.1.GA release

            Show
            hazzik Alexander Zaytsev added a comment - Closed after NH 3.3.1.GA release

              People

              • Assignee:
                hazzik Alexander Zaytsev
                Reporter:
                raulg Raul Nohea Goodness
              • Votes:
                1 Vote for this issue
                Watchers:
                4 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved:

                  Who's Looking?