I think I might have found a bug, but I'm not really sure. It could be
a syntax error on my part, but the compiler isn't catching. Anyway,
here is what I'm trying to do. Basically I've written my own
repository class that essentially just wraps the Fluent Repository
class. So here is the relevant code:


Public Class GenericRepository(Of T As IHasIntId)


    Private _fluentRepos As FluentNHibernate.Framework.IRepository

    Public Sub New(ByVal FluentRepository As
FluentNHibernate.Framework.IRepository)
        _fluentRepos = FluentRepository
    End Sub

    Private Sub New()

    End Sub

    Public Function GetById(ByVal Id As Integer) As T

        Return Query(Function(x As T) (x.Id = Id)).FirstOrDefault

    End Function

    Public Function Query(ByVal w As Expression(Of System.Func(Of T,
Boolean))) As IList(Of T)

        Return _fluentRepos.Query(Of T)(w).ToList()

    End Function

End Class

Then I wrote two unit tests, one that would pass in an
InMemoryRepository and one that would use an actual NHibernate session
to hit the real database.

here they are:

  <TestMethod()> Public Sub InMemoryTest()

        Dim inmemRepos As New InMemoryRepository()

        Dim p As New Product()
        Dim id As Integer = 5
        p.Id = id
        p.Title = "my product"

        inmemRepos.Save(p)

        Dim genRepos As New GenericRepository(Of Product)(inmemRepos)

        Dim foundP = genRepos.GetById(id)

        Assert.AreEqual(p.Title, foundP.Title)

    End Sub

   <TestMethod()> Public Sub DatabaseTest()

        Dim session = NHibernateSessionManager.Instance.GetSession()

        Dim flRepos As New Repository(session)
        Dim genRepos As New GenericRepository(Of Product)(flRepos)

        Dim id As Integer = 1

        Dim p = genRepos.GetById(id)

        Assert.IsNotNull(p)
        Assert.AreEqual(id, p.Id)

    End Sub

The InMemoryTest passed, and the DatabaseTest failed. The exception
from the DatabaseTest was a type conversion, from int to product (or
maybe the other way around.) I was able to "fix" it though. In the
Fluent NHibernate code I changed the Query method on the Repository
class from:

return _session.Linq<T>().Where(where).ToArray();

to

return _session.Linq<T>().Where(where.Compile()).ToArray();

Now both tests pass. All of the unit tests in the Fluent NHibernate
project pass either way.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Fluent NHibernate" group.
To post to this group, send email to fluent-nhibernate@googlegroups.com
To unsubscribe from this group, send email to 
fluent-nhibernate+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/fluent-nhibernate?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to