我正试图根据这里提出的想法在Asp .Net 5 beta 7
中实现自定义UserStore
。
public class ApplicationUserStore : UserStore<ApplicationUser>
{
public ApplicationUserStore(DbContext context)
: base(context)
{
}
public async override Task<ApplicationUser> FindByIdAsync(string userId)
{
var user = await base.FindByIdAsync(userId);
this.Context.Entry(user).Reference(u => u.Subject).Load();
return user;
}
}
我在这段代码中遇到两个问题。
- 在基类 中没有FindByIdAsync方法要重写
- 在FindByIdAsync中,没有找到Reference方法
我也不确定如何配置自定义用户存储,一旦我得到它编译。
更新:我通过将FindByIdAsync重写的定义更改为以下内容解决了第一个问题:
public async override Task<ApplicationUser> FindByIdAsync(string userId, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
第二个问题仍然是个问题。我如何在EF7
中指定我希望显式加载ApplicationUser
实体的引用属性Subject
?在EF6
中,在命名空间System.Data.EntityFramework.Infrastructure中定义了以下内容:
public DbReferenceEntry<TEntity, TProperty> Reference<TProperty>(Expression<Func<TEntity, TProperty>> navigationProperty) where TProperty : class;
在EF7
中定义的扩展方法在哪里?或者有一个显式加载引用的新方法?
你提到的这个问题很老了,从那时起,Identity已经发生了很多变化。
我可以告诉你,我已经在我的项目中实现了UserStore,而没有使用实体框架,我的类是这样声明的:
public sealed class UserStore<TUser> :
IUserStore<TUser>,
IUserPasswordStore<TUser>,
IUserEmailStore<TUser>,
IUserLoginStore<TUser>,
IUserRoleStore<TUser>,
IUserClaimStore<TUser>,
IUserPhoneNumberStore<TUser>,
IUserLockoutStore<TUser>,
IUserTwoFactorStore<TUser>
where TUser : SiteUser
{
.. implementation
}
其中SiteUser是我自己的自定义类
您可能还会发现这个问题很有帮助,因为它显示了我如何在DI
中插入自定义userstore看起来你确实想使用EF,但是如何声明和插入自定义用户库的原则应该是相同的,无论是否依赖EF