Cytując Guidelines and rules for GetHashCode Eric Lippert:Jak utworzyć kod HashCode w .net (C#) dla ciągu, który można bezpiecznie przechowywać w bazie danych?
Reguła: Konsumenci GetHashCode nie może powoływać się na to jest stabilne w czasie lub po drugiej AppDomains
Załóżmy, że masz obiekt klienta że ma kilka pola takie jak Name, Address, i tak dalej. Jeśli wykonasz dwa takie obiekty z dokładnie tymi samymi danymi w dwóch różnych procesach, to one nie muszą zwracać tego samego kodu hash . Jeśli taki obiekt zostanie utworzony we wtorek w jednym procesie, zamknij go, i ponownie uruchom program na . Środa, kody skrótu mogą być różne od .
To ukąsiło ludzi w przeszłości. Dokumentacja System.String.GetHashCode zauważa konkretnie, że dwa identyczne łańcuchy mogą mieć różne kody hash w różnych wersjach CLR i w rzeczywistości robią. Nie przechowuj skrótów łańcuchów w bazach danych i spodziewaj się, że będą one zawsze takie same, ponieważ nie będą.
Jaki jest poprawny sposób utworzenia HashCode ciąg, który można przechowywać w bazie danych?
(proszę mi powiedzieć, że nie jestem pierwszą osobą, która opuścił ten błąd w oprogramowaniu napisałem!)
Cóż, nigdy nie polegam na GetHashCode, ponieważ wiem, jak niedbale wdrażam tę metodę. Sądzę, że inni nie robią tego lepiej ... ;-) –
Nie jesteś pierwszą osobą, która opuściła ten błąd w oprogramowaniu, które napisałeś. – Bobby
Silniki Dbase są już bardzo dobre w hashowaniu. Po prostu utwórz indeks dla kolumny. –