Возможная ошибка в репозитории Fluent-NHibernate? - PullRequest
1 голос
/ 05 января 2009

Я думаю, что мог бы найти ошибку, но я не совсем уверен. Возможно Синтаксическая ошибка с моей стороны, но компилятор не ловит. Тем не мение, вот что я пытаюсь сделать В основном я написал свой собственный класс репозитория, который по существу просто оборачивает Fluent Repository учебный класс. Так вот соответствующий код:

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 

Затем я написал два модульных теста, один из которых прошел бы в InMemoryRepository и тот, который будет использовать фактический сеанс NHibernate поразить реальную базу данных. вот они:

 <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 

InMemoryTest пройден, а DatabaseTest не пройден. Исключение из DatabaseTest было преобразование типа, из int в продукт (или может быть, наоборот.) Но я смог это исправить. в Свободный код NHibernate Я изменил метод запроса в репозитории класс от:

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

до

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

Теперь оба теста пройдены. Все юнит-тесты в Fluent NHibernate Проект проходит в любом направлении.

1 Ответ

2 голосов
/ 06 января 2009

Ответ , полученный вами в списке рассылки Fluent NHibernate, скорее всего, правильный. То есть, это ошибка в Linq для NHibernate, а не Fluent NHibernate, которая вызвана компилятором VB, создающим различные деревья выражений для C #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...