asp.net 在数据库中找不到用户时,检索方法中抛出异常或返回null

wbrvyc0a  于 2023-08-08  发布在  .NET
关注(0)|答案(1)|浏览(107)

我有一个WPF - mvvm应用程序。我在视图模型中有方法与服务层通信,服务层使用实体框架与数据库通信。我很困惑,如果在数据库中找不到用户,该返回什么。

using KnitterNotebook.Database;
using KnitterNotebook.Exceptions;
using KnitterNotebook.Models;
using KnitterNotebook.Models.Dtos;
using KnitterNotebook.Services.Interfaces;
using Microsoft.EntityFrameworkCore;
using System;
using System.Threading.Tasks;

namespace KnitterNotebook.Services
{
    public class UserService : CrudService<User>, IUserService
    {
        private readonly DatabaseContext _databaseContext;

        public UserService(DatabaseContext databaseContext) : base(databaseContext)
        {
            _databaseContext = databaseContext;
        }

       
        public async Task<string> GetNicknameAsync(int id)
            => (await _databaseContext.Users.FindAsync(id)
                ?? throw new EntityNotFoundException(ExceptionsMessages.UserWithIdNotFound(id)))
                .Nickname;

        public async Task<string?> GetNicknameAsync2(int id)
            => await _databaseContext.Users.FindAsync(id)?.Nickname;

    }
}

字符串
我想返回用户的昵称,但如果有人把无效的ID。我想我可以抛出一个异常或者返回一个null nickname,这是不期望的,因为用户总是有一个昵称。哪种方法可能更好?

wqsoz72f

wqsoz72f1#

这取决于请求的来源。它是ID而不是用户名,所以我想你是在后台以某种方式获得它的,所以具有该ID的用户应该在数据库中,如果它丢失了,那就是一个错误,所以我会抛出一个异常。
但是如果它是从前端发出的(比如对这样的用户的请求),那么对数据库中不存在的用户的请求是完全正常的,所以我会返回null,然后在控制器中返回404。
还要记住,try catch块的速度很慢,所以不要使用多个try catch块。如果你知道有些东西不能出现在数据库中,而且这不是一个问题(不会产生任何逻辑错误),那么返回null是一件好事。

相关问题