почему can' t мой 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

большая тайна, когда я загружаю объект от базы данных, в Равняется() , other.foo всегда ноль, даже при том, что стоимость в Фу() правильна.

как это могло быть?

Другая версия Равняется методу, было это:

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

И в этой версии, <сильной> оба , Me.foo и other.foo являются нолем.

0
nl ja de

1 ответы

несколько часов спустя я обнаружил, что тип объекта Равняется (), метод был преступником, по-видимому потому что случай DirectCast-редактора обошел полномочие.

Во втором случае проблема состояла в том что частное внедрение (из интерфейса! кто знал!) обходил полномочие.

Так, мораль истории, кажется: избегают, чтобы DirectCast, и избежали внедрения закрытого интерфейса. :-)

0
добавлено
Кажется, возможно, что наиболее успешная практика не должна использовать области вообще, по крайней мере не в Равняется (). blog.xebia.com/2008/03/08/advanced-hibernate-proxy-pitfalls
добавлено автор joel truher, источник