c# - Eager loading using the UserManager -


so have created user service inherits usermanager , looks this:

/// <summary> /// service handling users /// </summary> public class userservice : usermanager<user> {     /// <summary>     /// default constructor     /// </summary>     /// <param name="store">the user repository</param>     public userservice(iuserstore<user> store)         : base(store)     {          // allow user service use email instead of usernames         this.uservalidator = new uservalidator<user>(this)         {             allowonlyalphanumericusernames = false         };     }      /// <summary>     /// static method creates new instance of user service     /// </summary>     /// <param name="options">any options should supplied</param>     /// <param name="context">the owin context</param>     /// <returns>the user service</returns>     public static userservice create(identityfactoryoptions<userservice> options, iowincontext context)     {          // our current database context         var dbcontext = context.get<databasecontext>();          // create our service         var service = new userservice(new userstore<user>(dbcontext));          // allow user service use email instead of usernames         service.uservalidator = new uservalidator<user>(service)         {             allowonlyalphanumericusernames = false         };          // assign our email service our user service         service.emailservice = new emailservice();          // our data protection provider         var dataprotectionprovider = options.dataprotectionprovider;          // if our data protection provider not nothing         if (dataprotectionprovider != null)         {              // set our token provider             service.usertokenprovider = new dataprotectortokenprovider<user>(dataprotectionprovider.create("asp.net identity"))             {                  // code email confirmation , reset password life time                 tokenlifespan = timespan.fromhours(6)             };         }          // return our service         return service;     } } 

but have disabled lazyloading in dbcontext. so, have issue. user can have centers, belong company therefore lookup table created have mapped in dbcontext this:

// create lookup tables modelbuilder.entity<center>()     .hasmany(m => m.users)     .withmany(m => m.centers)     .map(m =>     {         m.mapleftkey("centerid");         m.maprightkey("userid");         m.totable("usercenters");     }); 

so, need access user's centers doesn't seem identity framework supports eager loading. has found issue before , know how can use eagerloading usermanager?

cheers, /r3plica

damn, easy solve. usermanager exposes users dbset iqueryable can add include there, created funciton:

/// <summary> /// gets users /// </summary> /// <param name="includes">optional parameter eager loading related entities</param> /// <returns>an list of users</returns> public iqueryable<user> getall(params string[] includes) {      // our user dbset     var users = base.users;      // each include, include in query     foreach (var include in includes)         users = users.include(include);      // return our result     return users; } 

and in controllers, did this:

/// <summary> /// gets centers assigned user /// </summary> /// <param name="userid">the id of user</param> /// <returns>all centers user</returns> [httpget] [route("", name = "getcentersbyuser")] public ihttpactionresult get(string userid) {      // our user     var user = this.userservice.getall("centers").where(m => m.id.equals(userid, stringcomparison.ordinalignorecase)).singleordefault();      // if user doesn't exist, throw error     if (user == null)         return badrequest("could not find user.");      // return our centers     return ok(user.centers.select(m => this.modelfactory.create(m))); } 

Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -