grandchamp / Identity.Dapper

Identity package that uses Dapper instead EntityFramework for use with .NET Core
MIT License
268 stars 62 forks source link

NullReferenceException may be thrown #86

Open murashik opened 5 years ago

murashik commented 5 years ago

if _unitOfWork is null then here can crash: transaction: _unitOfWork.Transaction. I'm right?

//namespace Identity.Dapper.Repositories
var selectFunction = new Func<DbConnection, Task<TUser>>(async x =>
                {
                    var dynamicParameters = new DynamicParameters();
                    dynamicParameters.Add("Email", email);

                    var query = _queryFactory.GetQuery<SelectUserByEmailQuery>();

                    var userDictionary = new Dictionary<TKey, TUser>();
                    var result = await x.QueryAsync<TUser, TUserRole, TUser>(sql: query,
                                                                             param: dynamicParameters,
                                                                             transaction: _unitOfWork.Transaction,
                                                                             map: UserRoleMapping(userDictionary),
                                                                             splitOn: "UserId");

                    if (userDictionary.Count > 0)
                        return userDictionary.FirstOrDefault().Value;

                    return result.FirstOrDefault();
                });

                DbConnection conn = null;
                if (_unitOfWork?.Connection == null)
                {
                    using (conn = _connectionProvider.Create())
                    {
                        await conn.OpenAsync();

                        return await selectFunction(conn);
                    }
                }