Hej jag undrar lite hur ni tänker när ni använder er av collections med NHibernate i domänmodellen. en av de list typer som följer med NH är väl "set" Vad blir det för exception när man försöker göra det? Du skulle kunna låta din behörighetslista vara en hashtabel där nycklen för hashtablen är typ användarens ID. Eftersom du måste ha unika nyklar i hashtabellen så kan du inte lägga till samma användare flera gånger. Nackdelen är att du låser dig helt för vilken typ av listan du kan använda. Jag funderar på att kapsla in IList så att man bara kan läsa från den. Och sedan implemmentera en metod på entiteten som sköter inmatandat och borttagandet av grupper som en använder kan vara med i.NHibernate och Collections i domänmodellen
Det finns ju lite olika typer man kan använda sig av.
Frågan har egentligen inte så mycket med hur NHibernate och Collections fungerar utan hur man på ett snyggt sätt skall lösa listornas funktionalitet i domänmodellen.
Här är ett exempel.
Jag har en användare, en användare kan tillhöra en behörighetsgrupp.
En behörighetsgrupp kan ha en till flera användare i sig.
Behörighetsgruppen kan inte ha ha fler än en och samma användare, det skall alltså inte gå att lägga till flera stycken av en användare.
Om någon försöker lägga till en användare som redan ligger i behörighetsgruppen vill jag kasta ett exception som jag skapat.
Antingen hade jag kunnat lägga denna funktionalitet i Behörighetsgruppsklassen men det går ju fortfarande att ta add på en IList.
Så mitt alternativ är att ha en private eller protected IList PrivateMemberList property och en singleton property i min Behörighetsklass som heter UserGroupCollection som tar new UserGroupCollection(this.PrivateMemberList) som implemmenterar den lägg till funktionalitet eller inte innehåller add så att jag kan göra detta från Behörighetsklassen.
Det jagt tycker är lite fult då är att min domänmodell har blivit anpassad efter NHibernate vilket jag inte tycker är jättebra.
Så jag undrar finns det något annat sätt att lösa detta på?Sv: NHibernate och Collections i domänmodellen
och i ett set kan man ju inte lägga till en o samma sak flera ggrSv:NHibernate och Collections i domänmodellen
Sv: NHibernate och Collections i domänmodellen
Ett annat kanske snyggare alternativ är att du skapar en specifik behörighetslista som ärver från typ List<T> där du i Add-methoden loopar igenom din lista för att se om denna användare redan finns en gång och om den finns så kan du kasta ditt eget exception som du gjort.
Fördelen här är ju att ingen av dina "listor" har något med Hibernat att göra...
- MSv:NHibernate och Collections i domänmodellen
Det är bättre att jobba med IList<T> eller IDictionary<T> eller liknande och låta NH returnera ngt som passar. Vill du sen byta ut dem så behöver du inte fundera på de som använder listan utan bara på funktionen som returnerar rätt typ.Sv: NHibernate och Collections i domänmodellen
När metoden skall 2 inlägganden ske, användaren skall läggas till i användargruppens lista av medlemmar plus att användaren skall lägga till användargruppen i sin egen lista, för detta sker inte automatiskt har jag insett.
Sedan är en tråkig sak med att använda bag och om man vill ha en many-to-many koppling är att när man genererar databasen så blir indextabellen inte keys utan den tillåter dubletter, vilket är tråkigt.
Någon som har något tips?
En tanka var ett kapsla in ISet<T>, finns det några färdiga Wrapperklasser som gör om en ISet till en IList?