Fluent nhibernate Fluent NHibernate存储库中可能存在的错误?

Fluent nhibernate Fluent NHibernate存储库中可能存在的错误?,fluent-nhibernate,Fluent Nhibernate,我想我可能发现了一个bug,但我不是很确定。可能是 我有语法错误,但编译器无法捕获。无论如何 这就是我要做的。基本上我自己写的 repository类,基本上只包装Fluent存储库 班级。以下是相关代码: Public Class GenericRepository(Of T As IHasIntId) Private _fluentRepos As FluentNHibernate.Framework.IRepository Public Sub New(ByVal Fl

我想我可能发现了一个bug,但我不是很确定。可能是 我有语法错误,但编译器无法捕获。无论如何 这就是我要做的。基本上我自己写的 repository类,基本上只包装Fluent存储库 班级。以下是相关代码:

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 
公共子内存测试()
Dim InMemorRepos作为新的InMemoryRepository()
Dim p作为新产品()
Dim id为整数=5
p、 Id=Id
p、 Title=“我的产品”
inmemRepos.Save(p)
Dim genRepos作为(产品的)新通用存储库(inmemRepos)
Dim foundP=genRepos.GetById(id)
Assert.AreEqual(p.Title,foundP.Title)
端接头
公共子数据库测试()
Dim session=NHibernateSessionManager.Instance.GetSession()
Dim flRepos作为新存储库(会话)
Dim genRepos作为(产品的)新的通用存储库(flRepos)
Dim id为整数=1
Dim p=genRepos.GetById(id)
Assert.IsNotNull(p)
Assert.AreEqual(id,p.id)
端接头
InMemoryTest通过,数据库测试失败。例外 从DatabaseTest进行类型转换,从int到product(或 也许是另一种方式。)尽管如此,我还是能够“修复”它。在 Fluent NHibernate代码我更改了存储库上的查询方法 课程来源:

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

return\u session.Linq().Where(Where.Compile()).ToArray();
现在两项测试都通过了。Fluent NHibernate中的所有单元测试 项目通过任何一种方式。

Fluent NHibernate邮件列表上的最有可能是正确的。也就是说,这是Linq to NHibernate中的一个bug,而不是Fluent NHibernate中的bug,这是由VB编译器生成不同的C#表达式树引起的

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