Înregistrarea extensiei pentru NHibernate

Aș dori să folosesc "Equals" pentru a verifica o valoare în DB-ul meu și o altă valoare dată sunt aceleași. Din nefericire, NHbernate nu se implică în susținerea "Equals", așa că am căutat pe internet și am găsit acest tutorial: http://www.primordialcode.com/blog/post/nhibernate-3-extending-linq-provider-fix-notsupportedexception
În final, trebuie să înregistrez extensia - dar în ce dosar trebuie să fac asta?

Edit
Maybe I should describe my problem a bit better...
The situation: I have a enumeration called "GoodsType". Possible values are for example "Iron", "Wood", "Stone", etc. This enum is used in the class "InventoryGoods":

public class InventoryGoods: Goods
{
    public virtual User Owner { get; set; }
    public virtual Guid Id { get; set; }
    public virtual long Amount { get; set; }
    public virtual GoodsType GoodsType { get; set; }
    public virtual float Price { get; set; }
}

If a user want to sell something, I have to check wether he has enough of this specific good. I created a function for this check. This function is able to find the actual Owner by itself (the user which is logged in), so I only have to send the GoodsType and the Amount. But if I use this request: InventoryGoods good = _repository.First(x => (Equals(x.GoodsType, GivenGoodsType)) && (x.Amount >= GivenAmount));, the script stops with the error System.NotSupportedException: Boolean Equals(System.Object, System.Object)

Am căutat foarte mult și undeva pe SO (regret că nu-mi amintesc legătura) am găsit afirmația că "Equals" nu este suportat de NHibernate (pentru că nu poate fi tradus la SQL). Așa că am căutat o soluție și am găsit tutorialul numit mai sus. Dar nu pot găsi dosarul în care trebuie să înregistrez extensia.

I already found this solution: InventoryGoods good = _repository.First(x => x.Amount >= GivenAmount).Where(x => (Equals(x.GoodsType, GivenGoodsType)));, but I would prefer a way without double-checking via "Where", only with "First".

Edit 2
I'm using Fluent NHibernate for my mapping.

0

1 răspunsuri

Atâta timp cât știu, NHibernate acceptă Equals pentru compararea obiectelor. De fapt, ar trebui să o înlocuiți, atâta timp cât implicit este egal cu relațiile de implementare pe adresa memoriei, nu cu valorile obiectului.

See this similar questions: Why is it important to override GetHashCode when Equals method is overridden?

NHibernate: Motivele pentru eliminarea Equals și GetHashCode

0
adăugat
Ce incerci sa faci? Obțineți ansambluri de un anumit tip?
adăugat autor Oscar, sursa
De asemenea, observați că articolul pe care îl referiți spune că a fost folosit o versiune alfa a versiunii 3, versiunea actuală GA este 3.3.0 stabilă. Folosești ultima versiune?
adăugat autor Oscar, sursa
În pagina sursă a lui NHibernate, desigur! Verificați dacă versiunea dvs. NHibernate.dll este aceeași cu ultima versiune la: sourceforge.net/projects/nhibernate
adăugat autor Oscar, sursa
Nu pare să susțină "egal" - sau fac ceva greșit. Dacă încerc să o folosesc ca return _repository.First (x => x.GoodsType.Equals (GoodsTypeToCheck)); aruncă eroarea System.NotSupportedException: Equale Boolean (System.Object)
adăugat autor Christopher, sursa
Mi-am actualizat întrebarea, sper, acum este mai clară. Cred că folosesc o nouă versiune a lui NHibernate, dar unde pot verifica asta?
adăugat autor Christopher, sursa
Am actualizat versiunea mea - dar eroarea încă apare :-( Îmi pare rău, dar tocmai am văzut că par să fi uitat să scriu că folosesc Fluent NHibernate - face acest lucru o diferență?
adăugat autor Christopher, sursa