使用 Dapper 的 Asp.Net Identity 2.0 自定义存储提供程序

2024-02-05

我知道这个描述有点长,但很容易理解。我创建了一个自定义存储提供程序,它使用 Dapper 作为实体框架的替代品。为此,我创建了一个名为 AspNet.Identity.Dapper 的类库。 Web 应用程序只需添加对此类库的引用即可替换 EF。

类库里面有这样的代码:

在创建自定义提供程序时,我实现了自己的 UserStore。 UserStore 实现了所有接口。这是定义:

public class UserStore<TUser> : IUserLoginStore<TUser,int>,
IUserClaimStore<TUser,int>,
IUserRoleStore<TUser,int>,
IUserPasswordStore<TUser,int>,
IUserSecurityStampStore<TUser,int>,
IQueryableUserStore<TUser,int>,
IUserEmailStore<TUser,int>,
IUserPhoneNumberStore<TUser,int>,
IUserTwoFactorStore<TUser, int>,
IUserLockoutStore<TUser, int>,
IUserStore<TUser,int>,
IDisposable
where TUser : IdentityMember

注意泛型类型的约束

where TUser : IdentityMember

UserStore 调用 UserTable 定义为:

public void Insert(TUser member)
{...}

该调用是通过身份代码进行的,因此我无法更改定义。要自定义 Web 应用程序中使用的类以添加额外的自定义字段,只需将字段添加到继承自 IdentiyUser 类的 AppMember 类即可。下面的代码片段来自使用类库的 Web 应用程序。请注意,我只是将 Profile 字段添加到类中。

此代码来自使用的 Web 应用程序:

public class AppMember :   IdentityMember
{
public Profile MemberProfile { get; set; }
}

AccountController Resger 方法内部是以下代码:

await SignInManager.SignInAsync(AppMember, isPersistent: false, rememberBrowser: false);

在这里,我只是在 AppMember 发送到 UserStore 之前填充 Profile 字段。

现在,问题来了:

我无法在设计时访问 AppMember 的其他字段,因为它位于自己的库中并且不知道 AppMember。 AppMember 在消费 Web 应用程序中定义。

外部类库中的 UserTable 类内部是上面定义的 Insert 方法。请注意,它需要一个 TUser 成员参数。在运行时,它会解析为上面的 AppMember 类型,因为它应该是这样。但是,在设计时,由于上面定义的约束,它解析为 IdentityMember。因此,我无法在设计时访问 Profile 字段,因此无法将它们保存到数据库中。如果我尝试这个

member.Profile.fieldName 

我收到编译错误,因为它不了解 Profile。然而在运行时它就在那里。我用调试器检查过,运行时的类型应该是 AppMember。

我不想将所有“额外字段”添加到 Dapper 库中的 IdentityModel 类中,但目前我不知道有任何其他方法。因此,我将其呈现给比我更聪明、更有经验的开发人员,希望我遗漏了一些东西,并且有一种方法可以实现这一点。

任何解决此问题的帮助将不胜感激!谢谢你!


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Dapper 的 Asp.Net Identity 2.0 自定义存储提供程序 的相关文章

  • 在派生自 Control 的 ASP.NET 自定义控件中呈现自关闭标记

    我正在开发 Facebook FBML 控件库 并希望创建类似于 ASP NET WebControls 库的 FBML 控件 我有一个默认处理渲染的基类 这是我的渲染方法 protected override void Render Ht
  • 实体框架 - sql server 表中未设置默认值

    SQL Server 2005 数据库表有一列 createdon 其默认值设置为 getdate 我正在尝试使用实体框架添加记录 createdon 列未更新 我是否错过了实体框架中的任何属性 请提出建议 这是实体框架存在的少数问题之一
  • 如何在自定义保存操作 WFFM 中获取 Sitecore.Current.Site 对象?

    我在用着面向营销人员的 Sitecore 网络表单 在里面save action我得到的表格Sitecore Context Site对象 但该对象没有返回正确的上下文 该值为 modules shell 有谁知道我如何才能获得正确的上下文
  • 代码块调试问题

    我正在尝试在代码块中运行一个简单的链表程序 但我无法运行该程序并且收到以下错误 Active debugger config GDB CDB debugger Default Building to ensure sources are u
  • NHibernate手动控制抓取

    我正在使用 NHibernate 我想控制手动获取相关实体 这是我的示例实体 public class Post public virtual long Id get set public virtual string Title get
  • 递归显式模板实例化以导出库的符号

    在我之前的问题中我问过递归显式模板实例化是否可能 https stackoverflow com questions 7395113 is recursive explicit template instantiation possible
  • C++ 编译器可以对结构中的元素重新排序吗

    C 编译器 特别是 g 可以对结构体的内部元素重新排序吗 我看到一些奇怪的行为 其中我有一个包含如下内容的结构 Struct SomeStruct long someLong long someLongArray 25 unsigned l
  • 使用 boost::asio 是否有一种可移植的方法来查找空闲端口号

    我目前正在尝试找出一种方法来查找空闲端口号以建立连接 最好使用 boost asio 然后 该端口号将用于侦听 只有这样我才能打开套接字 大致来说 有没有办法做到 tcp resolver query query localhost por
  • 在 C++ 中从另一个数组初始化结构内的数组[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions struc
  • 驱蚊程序?

    不 我认真的 最近 我读到 当电脑的压电蜂鸣器以一定频率振动时 声音可以驱赶蚊子 真的吗 如何以编程方式访问 PC 蜂鸣器 而不是扬声器 最好使用 C 我不知道有没有蚊子 但我的头疼得要命 啊啊 using System Runtime I
  • 从动态服务器中抓取 html 列表数据

    哈喽大家好 抱歉提出转储问题 这是我最后的手段 我发誓我尝试了无数其他 Stackoverflow 问题 不同的框架等 但这些似乎没有帮助 我有以下问题 一个网站显示一个数据列表 前面有大量的 div li span 等标签 它是一个很大的
  • 在 C# 中给定周数和年份,计算一周的开始和结束日期(基于 ISO 规范)

    我需要生成一份报告 显示一年中的 52 周 或某些年份的 53 周 及其开始日期和结束日期 有一个 ISO 规范可以做到这一点 但看起来非常复杂 我希望有人知道在 C 或 Visual Basic 中执行此操作的方法 实际上适用于 Visu
  • 变形:Opencv 使用 Visual Studio 将图像显示到曲面屏幕

    我正在尝试使用 opencv API 来扭曲图像 以便将其显示到曲面屏幕上 我已经浏览了opencv中提供的翘曲apihere http docs opencv org 2 4 modules stitching doc warpers h
  • 使用 openssl 库获取 x509 证书哈希

    我目前正在开发一个应用程序 它使用 openssl 库 libcrypto 来生成证书 现在我必须获取现有证书的哈希值 当我使用终端时 我可以使用以下命令生成哈希值 openssl x509 hash in cert pem noout 输
  • 有没有办法对 RichTextBox 的撤消历史进行分组或暂时禁用它?

    我目前正在研究 WPF 中 RichTextBox 内的表格 在 WPF 中 表格没有行和列 只有行 每行都有一定数量的单元格 当用户按下 添加列 按钮时 我的程序会向每一行添加一个新单元格 使用此方法的问题是 在用户添加一列后 如果他们按
  • OpenCV:处理每一帧

    我想使用 OpenCV 编写一个跨平台应用程序进行视频捕获 在所有示例中 我发现来自相机的帧是使用抓取功能进行处理并等待一段时间 我想处理序列中的每一帧 我想定义自己的回调函数 每次当一个新帧准备好处理时都会执行该函数 例如直播对于 Win
  • 如何在 ASP.NET MVC 中获取参数数组作为 GET / POST?

    如何最好地获取数组 item gt value 对作为 GET POST 参数 在 PHP 中 我可以这样做 网址 这得到的参数为 Array a gt Array one gt 100 two gt 200 有什么方法可以在 ASP NE
  • 对嵌套属性使用 XmlAttributeOverrides

    我试图使用 XmlAttributeOverrides 来控制类序列化后哪些类属性出现在 xml 中 它适用于 根 类上的属性 但不适用于嵌套属性 这是一个简单的例子来说明我想要完成的任务 我的类层次结构如下 public class Ma
  • 绑定未正确更新用户控件属性 MVVM

    编辑 删除旧代码 我将它放在 MainWindow xaml 上
  • 将整个单词与特殊字符匹配的正则表达式不起作用? [复制]

    这个问题在这里已经有答案了 我正在经历这个问题C Regex Match 整个单词 https stackoverflow com q 1209049 443568 它说要匹配整个单词使用 b模式 b 这对于匹配没有任何特殊字符的整个单词效

随机推荐