Skip to content

Commit 95fd614

Browse files
committed
Update UserStore and RoleStore to use async data access functions.
1 parent 28b5907 commit 95fd614

File tree

2 files changed

+37
-60
lines changed

2 files changed

+37
-60
lines changed

source/NHibernate.AspNet.Identity/RoleStore`1.cs

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,36 +39,33 @@ public virtual Task<TRole> FindByNameAsync(string roleName)
3939
return Task.FromResult<TRole>(Queryable.FirstOrDefault<TRole>(Queryable.Where<TRole>(this.Context.Query<TRole>(), (Expression<Func<TRole, bool>>)(u => u.Name.ToUpper() == roleName.ToUpper()))));
4040
}
4141

42-
public virtual Task CreateAsync(TRole role)
42+
public virtual async Task CreateAsync(TRole role)
4343
{
4444
this.ThrowIfDisposed();
4545
if ((object)role == null)
4646
throw new ArgumentNullException("role");
47-
Context.Save(role);
48-
Context.Flush();
49-
return Task.FromResult(0);
47+
await Context.SaveAsync(role);
48+
await Context.FlushAsync();
5049
}
5150

52-
public virtual Task DeleteAsync(TRole role)
51+
public virtual async Task DeleteAsync(TRole role)
5352
{
5453
this.ThrowIfDisposed();
5554
if (role == null)
5655
{
5756
throw new ArgumentNullException("role");
5857
}
59-
Context.Delete(role);
60-
Context.Flush();
61-
return Task.FromResult(0);
58+
await Context.DeleteAsync(role);
59+
await Context.FlushAsync();
6260
}
6361

64-
public virtual Task UpdateAsync(TRole role)
62+
public virtual async Task UpdateAsync(TRole role)
6563
{
6664
this.ThrowIfDisposed();
6765
if ((object)role == null)
6866
throw new ArgumentNullException("role");
69-
Context.Update(role);
70-
Context.Flush();
71-
return Task.FromResult(0);
67+
await Context.UpdateAsync(role);
68+
await Context.FlushAsync();
7269
}
7370

7471
private void ThrowIfDisposed()

source/NHibernate.AspNet.Identity/UserStore`1.cs

Lines changed: 28 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -51,45 +51,39 @@ public virtual Task<TUser> FindByNameAsync(string userName)
5151
return this.GetUserAggregateAsync((TUser u) => u.UserName.ToUpper() == userName.ToUpper());
5252
}
5353

54-
public virtual Task CreateAsync(TUser user)
54+
public virtual async Task CreateAsync(TUser user)
5555
{
5656
this.ThrowIfDisposed();
5757
if ((object)user == null)
5858
{
5959
throw new ArgumentNullException("user");
6060
}
6161

62-
Context.Save(user);
63-
Context.Flush();
64-
65-
return Task.FromResult(0);
62+
await Context.SaveAsync(user);
63+
await Context.FlushAsync();
6664
}
6765

68-
public virtual Task DeleteAsync(TUser user)
66+
public virtual async Task DeleteAsync(TUser user)
6967
{
7068
if ((object)user == null)
7169
{
7270
throw new ArgumentNullException("user");
7371
}
7472

75-
this.Context.Delete(user);
76-
Context.Flush();
77-
78-
return Task.FromResult(0);
73+
await Context.DeleteAsync(user);
74+
await Context.FlushAsync();
7975
}
8076

81-
public virtual Task UpdateAsync(TUser user)
77+
public virtual async Task UpdateAsync(TUser user)
8278
{
8379
this.ThrowIfDisposed();
8480
if ((object)user == null)
8581
{
8682
throw new ArgumentNullException("user");
8783
}
8884

89-
this.Context.Update(user);
90-
Context.Flush();
91-
92-
return Task.FromResult(0);
85+
await Context.UpdateAsync(user);
86+
await Context.FlushAsync();
9387
}
9488

9589
private void ThrowIfDisposed()
@@ -129,7 +123,7 @@ from l in u.Logins
129123
where l.LoginProvider == login.LoginProvider && l.ProviderKey == login.ProviderKey
130124
select u;
131125

132-
return Task.FromResult(query.SingleOrDefault());
126+
return query.SingleOrDefaultAsync();
133127
}
134128

135129
public virtual Task AddLoginAsync(TUser user, UserLoginInfo login)
@@ -150,11 +144,10 @@ public virtual Task AddLoginAsync(TUser user, UserLoginInfo login)
150144
LoginProvider = login.LoginProvider
151145
});
152146

153-
this.Context.SaveOrUpdate(user);
154-
return Task.FromResult<int>(0);
147+
return Context.SaveOrUpdateAsync(user);
155148
}
156149

157-
public virtual Task RemoveLoginAsync(TUser user, UserLoginInfo login)
150+
public virtual async Task RemoveLoginAsync(TUser user, UserLoginInfo login)
158151
{
159152
this.ThrowIfDisposed();
160153
if ((object)user == null)
@@ -170,44 +163,34 @@ public virtual Task RemoveLoginAsync(TUser user, UserLoginInfo login)
170163
if (info != null)
171164
{
172165
user.Logins.Remove(info);
173-
this.Context.Update(user);
166+
await Context.UpdateAsync(user);
174167
}
175-
176-
return Task.FromResult<int>(0);
177168
}
178169

179-
public virtual Task<IList<UserLoginInfo>> GetLoginsAsync(TUser user)
170+
public virtual async Task<IList<UserLoginInfo>> GetLoginsAsync(TUser user)
180171
{
181172
this.ThrowIfDisposed();
182173
if ((object)user == null)
183174
{
184175
throw new ArgumentNullException("user");
185176
}
186-
187-
IList<UserLoginInfo> result = new List<UserLoginInfo>();
188-
foreach (IdentityUserLogin identityUserLogin in (IEnumerable<IdentityUserLogin>)user.Logins)
189-
{
190-
result.Add(new UserLoginInfo(identityUserLogin.LoginProvider, identityUserLogin.ProviderKey));
191-
}
192-
193-
return Task.FromResult<IList<UserLoginInfo>>(result);
177+
178+
return (await user.Logins.AsQueryable().ToListAsync())
179+
.Select(identityUserLogin => new UserLoginInfo(identityUserLogin.LoginProvider, identityUserLogin.ProviderKey))
180+
.ToList();
194181
}
195182

196-
public virtual Task<IList<Claim>> GetClaimsAsync(TUser user)
183+
public virtual async Task<IList<Claim>> GetClaimsAsync(TUser user)
197184
{
198185
this.ThrowIfDisposed();
199186
if ((object)user == null)
200187
{
201188
throw new ArgumentNullException("user");
202189
}
203190

204-
IList<Claim> result = new List<Claim>();
205-
foreach (IdentityUserClaim identityUserClaim in (IEnumerable<IdentityUserClaim>)user.Claims)
206-
{
207-
result.Add(new Claim(identityUserClaim.ClaimType, identityUserClaim.ClaimValue));
208-
}
209-
210-
return Task.FromResult<IList<Claim>>(result);
191+
return (await user.Claims.AsQueryable().ToListAsync())
192+
.Select(identityUserClaim => new Claim(identityUserClaim.ClaimType, identityUserClaim.ClaimValue))
193+
.ToList();
211194
}
212195

213196
public virtual Task AddClaimAsync(TUser user, Claim claim)
@@ -604,15 +587,12 @@ public virtual Task SetTwoFactorEnabledAsync(TUser user, bool enabled)
604587

605588
private Task<TUser> GetUserAggregateAsync(Expression<Func<TUser, bool>> filter)
606589
{
607-
return Task.Run(() =>
608-
{
609-
// no cartesian product, batch call. Don't know if it's really needed: should we eager load or let lazy loading do its stuff?
610-
var query = this.Context.Query<TUser>().Where(filter);
611-
query.Fetch(p => p.Roles).ToFuture();
612-
query.Fetch(p => p.Claims).ToFuture();
613-
query.Fetch(p => p.Logins).ToFuture();
614-
return query.ToFuture().FirstOrDefault();
615-
});
590+
// no cartesian product, batch call. Don't know if it's really needed: should we eager load or let lazy loading do its stuff?
591+
var query = this.Context.Query<TUser>().Where(filter);
592+
query.Fetch(p => p.Roles).ToFuture();
593+
query.Fetch(p => p.Claims).ToFuture();
594+
query.Fetch(p => p.Logins).ToFuture();
595+
return query.ToFutureValue().GetValueAsync();
616596
}
617597
}
618598
}

0 commit comments

Comments
 (0)