webForumDet fria alternativet

NHibernate + Repository

.NET

4 svar · 625 visningar · startad av doggelito

Medlem sedan juni 20003 076 inlägg
Frågan#1

Jag har NHibernate i botten, på det har jag en Repositoryklass och ett IRepository interface.
Nu skulle jag vilja utöka mitt IRepository med NHibernates ISession (för i vissa situationer kan det vara bra att komma åt kärnan i NHibernate).
Men eftersom mitt IRepository är generiskt så kan jag inte lägga till NHIbernates ISession direkt i mitt interface så här:

public interface IRepository<TEntity, TId>
{
     ...
     NHibernate.ISession CurrentSession { get; }
}

för då har jag ju låst mitt interface till NHIbernate.
Ett alternativ är att istället returnera ett object så här:

public interface IRepository<TEntity, TId>
{
     ...
     object CurrentSession { get; }
}
public class NHibernateRepository<TEntity, TId> : IRepository<TEntity, TId>
{
     public object CurrentSession
     {
          get
          {
              return SessionFactory.GetCurrentSession();
          }
     }
}

men då måste jag typkonvertera så fort jag vill använda CurrentSession.
Det skulle ju funka, men om det går att undvika så är ju det bättre!

Kan jag på nått sätt wrappa NHIbernates ISession i en egen ISession på något konstigt sätt? :stud

Medlem sedan aug. 20003 575 inlägg
#2

Måste du använda dig av repositories?
Om jag säger att du lika gärna kan använda dig av session direkt utan repositories? :)
Skicka runt sessionfactory i dina servicar som du anropar getcurrent i :).

Medlem sedan juni 20003 076 inlägg
#3

Hehe, nej, det behöver jag väl egentligen inte. :)
Det har mest varit i utbildningssyfte som jag skapat mitt IRepository.

Om det inte går att lösa så kan jag i värsta fall, på de få ställen jag behöver NHibernates ISession, lägga en referens i min serviceklass.

Medlem sedan aug. 20003 575 inlägg
#4

Mmm, jag tycker att ISession = Repository, eftersom den gör det ett repository skall göra ha logiken för att hämta spara osv.
Så att skicka in sessionfactory'n i serviceconstrutorn är det bästa =)

Medlem sedan juni 20003 076 inlägg
#5

Oki. Men hur blir det då med regeln som säger att man inte ska/bör ha "hårda" kopplingar mellan t.ex. servicelager och databaslager om jag skickar in sessionfactory i konstruktorn?
I det fallet blir jag väl heller inte hjälpt av att använda en IOC.
Går det inte att ha det löst kopplat mellan sina delar om man använder nhibernate? :stud

132 ms totalt · 2 externa anrop · v20260731065814-full.2ae45ccc
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)