为什么我的nhibernate equals方法找不到我的字段?

时间:2013-01-29 02:35:27

标签: .net nhibernate

所以我有这个(VB,对不起)对象:

Class Foo

  Private ReadOnly foo as Integer

  Public Overridable ReadOnly Property Foo() as Integer
    Get
      Return foo
    End Get
  End Property

  Public Overridable Overloads Function Equals(ByVal other as Foo) as Boolean
    Return Me.foo.Equals(other.foo)
  End Function

  Public Overloads Overrides Function Equals(ByVal obj as Object) as Boolean
    ... some boilerplate ...
    Return Equals(DirectCast(obj, Foo))
  End Function
End Class

最大的谜团是,当我从数据库加载对象时,在Equals()中,other.foo始终为零,即使Foo()中的值是正确的。

怎么会这样?

Equals方法的另一个版本是:

Private Overloads Function Equals(ByVal other as Foo) as Boolean Implements IEquatable(Of Foo).Equals
  Return Me.foo.Equals(other.foo)
End Function

在此版本中, Me.fooother.foo均为零。

1 个答案:

答案 0 :(得分:0)

几个小时后,我发现对象类型的Equals()方法是罪魁祸首,可能是因为DirectCast-ed实例绕过了代理。

在第二个例子中,问题是私有实现(of an interface!谁知道!)绕过了代理。

因此,故事的寓意似乎是:避免使用DirectCast,避免私有接口实现。: - )