Pazi, ssi je tehnički u pravu.
Generalno bi trebalo logiku koja ti je sad u modelu (klasa Korisnik) trebalo da izmjestiš u Bussiness Layer (MVC Controller vjerovatno, ili nešto slično, ne znam je li ti to Web ili Desktop aplikacija).
Ali, ako si ti zadovoljan, nemoj da slušaš nas :)
Ono na šta treba da obratiš pažnju, i što mi se ne sviđa je što u extenziji entity-ja (koji već pripada nekom ObjectContext-u ili DBContextu, ti instanciraš još jedan Context, kako bi dobio povezane entitete).
Ti entiteti će pripadati tom novom Context-u, a Korisnik originalnom.
To ti može praviti probleme prilikom query-inga. Sad pišem napamet, ali mislim da će ti ovo prijavit runtime grešku:
Code:
db.Korisnici.Where(k => k.Racuni.Any()).Count();
Tako da, ako želiš da ostaneš pri trenutnom rješenju, trebalo bi da uhvatiš Context samog "Korisnika", pa da kroz njega dobiješ povezane entitete. Na osnovu entiteta možeš da dobiješ Context u slučaju da entitet ima bar 1 definisanu relaciju, u tvom slučaju mi se čini da je to zadovoljeno. Evo funkcije za tu svrhu (ne pravi niti jedan hit prema bazi ovo je samo na osnovu edmx definicije):
Code:
public static MyDBEntities GetContext(this IEntityWithRelationships entity)
{
if (entity == null) throw new ArgumentNullException("null");
var relationshipManager = entity.RelationshipManager;
var relatedEnd = relationshipManager.GetAllRelatedEnds().FirstOrDefault();
if (relatedEnd == null) throw new Exception("Ne postoje definisane relacije");
var query = relatedEnd.CreateSourceQuery() as ObjectQuery;
if (query == null) throw new Exception("Entitet je Detached");
return query.Context as MyDBEntities;
}
Onda je koristiš na sledeći način:
Code:
public IQueryable<Racun> Racuni
{
get
{
MyDBEntities db = (this as IEntityWithRelationships).GetContext();
If( ... potrebne provere da li je korisnik admin)
.....
return db.Racuni.Where(c => c.IDKorisnika== this.IDKorisnika)....<ostali uslovi>;
.....
}
}
Pozdrav.