Entity Framework получает данные из ВСЕГО столбца

У меня есть вызов API getUser, который возвращает ВСЕ данные из базы данных в указанном столбце, но я хочу исключить некоторые вещи; номер телефона, адрес электронной почты и т. д.

Попробовал возиться с LINQ, сменив модель Builder, изменив опцию Builder

Искал любой SQL, говорящий "Select * from", но ничего не нашел

Удаление вещей в моей UserModel работает, однако это уродливый способ сделать это.

Result<UserModel> result = new Result<UserModel>();
try
    {
        using (var db = new ComeatDBContext(optionsBuilder.Options))
        {
            var user = db.User
                .Include(f => f.Nationality)
                .Include(f => f.State)
                .FirstOrDefault(e => e.Id == id && !e.IsDeleted);

            result.ResponseObject = (new UserModel()).FromUser(user);
            var house = db.House.FirstOrDefault(e => e.UserId == user.Id);
            if (house != null)
            {
                result.ResponseObject.House = ( new HouseModel() ).FromHouse(house);
            }
            result.Success = true;
        }

Ожидается указание, какие данные включать (или не включать), но вместо этого я получаю все, если только я не установил значения в "null" после того, как они были доставлены БД.

1 ответ

Решение

.FirstOrDefault(...) это то, что вызывает выполнение запроса к базе данных (SQL). Он заполняет все свойства, которые определены для объекта. Затем объект данных преобразуется в ваш UserModel объект, когда вы выполняете (new UserModel()).FromUser(user);,

Если вы хотите повторно использовать свой класс UserModel, но не заполняете все столбцы, вы можете сделать что-то вроде этого;

var userModel = db.User
     .Select(x => new UserModel { Name = x.Name, Id = x.Id })
     .FirstOrDefault(e => e.Id == id && !e.IsDeleted);

result.ResponseObject = userModel;
Другие вопросы по тегам