That's very interesting. Unfortunately, the bits in the Framework project are rather neglected, so there may very-well be a bug in there. I need to investigate this before I can pass judgement though.
On 1/5/09, RalyDSM <j...@glmotorsports.net> wrote: > > 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 -~----------~----~----~----~------~----~------~--~---