zoukankan      html  css  js  c++  java
  • Identity – 冷知识

    RoleManager, RoleStore, EF Core 关系

    RoleManager 可以理解为一个上层 service, 是让我们操作 Role 的. 比如 create, update, delete 等.

    RoleStore 可以理解为一个 repository, 默认情况下, 它内部是使用 EF Core 来做 Persistence.

    如果我们不想使用 EF Core 的话也可以自己实现一个 IRoleStore 读写数据库

    另外如果想使用 RoleManager.Roles 直接操作 IQueryable 的话. RoleStore 必须实现 IQueryableRoeStore 接口

    对于 build-in 的 EF Core, 要实现 IQueryable 自然是很容易的.

    RoleManager 如何做 transaction

    有时候, 想批量创建或删除 Roles. 这就需要用到 transaction 确保原子性.

    Manager.Create -> Store.Create -> DbContext.SaveChanges

      

    transaction 在 DBContext 里, Manager 的 Store 是 protected 的, 即便它是 public, 它也只是一个 IRoleStore

    而 IRoleStore 完全没有获取到 DbContext 的方法.

    所以从这里可以确定, Identity 不支持 transaction 概念.

    那怎么办? 

    如果不 care 管理的话, 可以直接在应用层调用 DbContext. 因为"我们知道“它们是一样的.

    但如果 "我们不知道" 的话. 那用 TransactionScope 会解耦一些.

    但我觉得这些都只是 workaround, 毕竟 Identity 不是应该要支持 transaction 的吗?

  • 相关阅读:
    安装IDM扩展
    Go_数组&切片
    Mycat概念&安装
    IDEA自定义主题
    完全卸载Oracle11g
    创建型模式——单例模式(Singleton)
    设计模式统计
    PHP解压带密码的zip文件
    Win推荐软件
    如何设置线程池的线程数?
  • 原文地址:https://www.cnblogs.com/keatkeat/p/15682857.html
Copyright © 2011-2022 走看看