首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fluent-NHibernate Repository中可能存在错误?

Fluent-NHibernate Repository中可能存在错误?
EN

Stack Overflow用户
提问于 2009-01-05 19:50:14
回答 1查看 858关注 0票数 1

我想我可能发现了一个bug,但我不是很确定。这可能是我的一个语法错误,但是编译器没有捕捉到。不管怎样,这就是我想要做的。基本上,我已经编写了自己的repository类,基本上只是包装了Fluent Repository类。下面是相关代码:

代码语言:javascript
复制
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会话来访问实际的数据库。下面是它们:

代码语言:javascript
复制
 <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到product (或者反过来)。不过,我还是能够“修复”它。在流畅的NHibernate代码中,我将Repository类的查询方法从:

代码语言:javascript
复制
return _session.Linq<T>().Where(where).ToArray(); 

代码语言:javascript
复制
return _session.Linq<T>().Where(where.Compile()).ToArray(); 

现在两个测试都通过了。Fluent NHibernate项目中的所有单元测试都通过了这两种方式。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-01-06 08:39:21

Fluent NHibernate邮件列表中的answer that you received很可能是正确的。也就是说,这是Linq to NHibernate中的一个错误,而不是流畅的NHibernate,这是由VB编译器生成不同于C#的表达式树造成的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/414272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档