【问题标题】:Asp.Net Core 3.1 LinqToDB.Identity UserManager CreateAsync ErrorAsp.Net Core 3.1 LinqToDB.Identity UserManager CreateAsync 错误
【发布时间】:2020-11-29 05:59:08
【问题描述】:

我已经在我的项目中实现了 LinqToDB.Identity。我一直在尝试使用 .Net Identity UserManager 创建用户,但出现错误。我还实现了 LinqToDB.Identity 优化,例如 AddLinqToDBStores 和 IdentityConnectionFactory。

正如我所提到的,当我尝试创建用户时遇到这样的错误。

{“找不到方法:'Int32 LinqToDB.DataExtensions.Insert(LinqToDB.IDataContext, System.__Canon, System.String, System.String, System.String)'。”}

这是我的 AddLinqToDBStores 选项和配置。

 public static void AddDevPlatformAuthentication(this IServiceCollection services, IConfiguration configuration)
    {
        services.AddIdentity<AppUser, LinqToDB.Identity.IdentityRole<int>>(options =>
        {
            options.Password.RequireDigit = true;
            options.Password.RequiredLength = 4;
            options.Password.RequireNonAlphanumeric = false;
            options.Password.RequireUppercase = true;
            options.Password.RequireLowercase = false;

            options.User.RequireUniqueEmail = true;

            //TODO
            //options.User.RequireUniqueEmail = true; 
            //options.SignIn.RequireConfirmedEmail = true;
            //options.Lockout.MaxFailedAccessAttempts = 5;
            //options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(3);

        }).AddLinqToDBStores<int, AppUserClaim, AppUserRole, AppUserLogin, AppUserToken, AppRoleClaim>(new
        IdentityConnectionFactory(new SqlServerDataProvider(ProviderName.SqlServer, SqlServerVersion.v2017), "SqlServerIdentity", DataSettingsManager.LoadSettings().ConnectionString))
            .AddDefaultTokenProviders();

        services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie();

        // Uncomment the following lines to enable logging in with third party login providers

        JwtTokenDefinitions.LoadFromConfiguration(configuration);
        services.ConfigureJwtAuthentication();
        services.ConfigureJwtAuthorization();
    }

这是我继承自 IConnectionFactory 接口的 IdentityConnectionFactory 类。

public class IdentityConnectionFactory : IConnectionFactory
{
    private static readonly Dictionary<string, HashSet<string>> _tables = new Dictionary<string, HashSet<string>>();
    private readonly string _configuration;
    private readonly string _connectionString;
    private readonly string _key;
    private readonly IDataProvider _provider;

    public IdentityConnectionFactory(IDataProvider provider, string configuration, string connectionString)
    {
        _provider = provider;
        Configuration.Linq.AllowMultipleQuery = true;
        //DataConnection.AddConfiguration(configuration, connectionString, provider);
        _configuration = configuration;
        _connectionString = connectionString;
        _key = _configuration + "$$" + _connectionString;
    }
    public IDataContext GetContext()
    {
        return new DataContext(_provider, _connectionString);
    }

    public DataConnection GetConnection()
    {
        var db = new DataConnection(_provider, _connectionString);
        db.AddMappingSchema(AdditionalSchema);

        return db;
    }

    protected MappingSchema AdditionalSchema
    {
        get
        {
            if (!(Singleton<MappingSchema>.Instance is null))
                return Singleton<MappingSchema>.Instance;

            Singleton<MappingSchema>.Instance =
                new MappingSchema(_provider.Name) { MetadataReader = new FluentMigratorMetadataReader() };

            return Singleton<MappingSchema>.Instance;
        }
    }

代码块太多了,这里就不贴了。如果有人可以提供帮助,我将非常高兴。

如果你想看项目,可以在这里查看;

https://github.com/dogaanismail/DevPlatform

【问题讨论】:

    标签: asp.net-core asp.net-identity asp.net-core-identity


    【解决方案1】:

    通过在解决方案中添加 LinqToDB.Identity 类库解决了这个问题。我在 Github 上创建了一个问题。您可以从此链接查看。

    https://github.com/linq2db/linq2db/issues/2400

    我已经卸载了一个 nuget 包的 LinqToDB.Identity。与其使用 LinqToDB.Identity nuget 包,不如使用 LinqToDB.Identity 类库。另外,我可以调试这个类库。真的很有用!

    您可以通过此链接获取 LinqToDB.Identity 类库 https://github.com/linq2db/LinqToDB.Identity/tree/master/src/LinqToDB.Identity

    或者,如果您愿意,您可以查看我的名为 DevPlatform 的项目。 https://github.com/dogaanismail/DevPlatform

    除了所有这些之外,我还为我的 AppUser 主键添加了一个 IdentityAttribute。我没有创建没有此属性的用户。

    public class AppUser : IdentityUser<int>, IEntity
    {
        [Required, Identity]
        [Key]
        public override int Id { get => base.Id; set => base.Id = value; }
        public DateTime CreatedDate { get; set; }
        public DateTime? ModifiedDate { get; set; }
    
        public int? CreatedBy { get; set; }
        public int? ModifiedBy { get; set; }
        public int? StatusId { get; set; }
    }
    

    由于创建了类库并添加了LinqToDB.Identity 类,例如IdentityUser、DefaultConnectionFactory、IConcurrency 等,我使用UserManager 成功创建了一个用户。

    【讨论】:

      猜你喜欢
      • 2020-10-29
      • 2020-11-28
      • 2017-09-01
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多