C# Базовая библиотека и Entity Framework 'admin' равно 'Admin' - PullRequest
0 голосов
/ 05 мая 2020

[Исходный код BE, использующий функцию Equals]

using System.Collections.Generic;
using System.Linq;
using System.Data.Entity;
using CoreAPI.Model.UserRoles.Users;

namespace CoreAPI.Repository.UserRoles.Users
{
    public class UserRepository : RepositoryImpl<User>, IUserRepository
    {
        public UserRepository() : base()
        {

        }

        public UserRepository(DbContext dbContext) : base(dbContext)
        {

        }

        public User FindByUserName(string userName)
        {
            return dbContext.Set<User>().Include("Roles.URRole").Where(u => u.UserName.Equals(userName)).FirstOrDefault();
        }

        public IEnumerable<User> FindAll()
        {
            return dbContext.Set<User>().Include("Roles.URRole");
        }
    }
}

Вот отправка json: {"userName": "Admin", "passWord": "Admin@12345"}

В таблице «Пользователи» поле UserName хранит значение «admin». Я не понимаю, почему функция Equals допускает значения «Admin» и «admin». Пожалуйста, научи меня, чего мне не хватает.

1 Ответ

0 голосов
/ 06 мая 2020

Здесь Equals будет переведено как эквивалент SQL запроса по структуре сущностей и SQL адаптеру (то же самое, если вы используете ==).

В базах данных существуют разные правила для сравнение строк. Это то, что называется « сопоставление ». Если текущая сортировка вашей базы данных нечувствительна к регистру, то Admin и admin будут считаться вашей базой данных .

Это можно решить

1 - в вашей базе данных, изменив параметры сортировки таблицы, запроса или сервера на чувствительный к регистру;

2 - или путем предварительной обработки вашего ввода, в зависимости от ваших фактических требований. (например, если вы знаете, что хотите запретить все заглавные буквы, это легко отфильтровать перед выполнением любого запроса)

Чтобы точно определить более точный ответ на изменение сопоставления, вам необходимо предоставить свою фактическую систему базы данных, которую вы используют (SQL Server? MySQL? Postgree SQL? SQLite? et c ..)

Например, для SQL Server вы можете проверить это: https://docs.microsoft.com/en-us/sql/relational-databases/collations/set-or-change-the-server-collation и это https://docs.microsoft.com/en-us/sql/relational-databases/collations/collation-and-unicode-support

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...