添加列EF核心后getAsync时出错

时间:2019-09-18 08:47:00

标签: asp.net entity-framework asp.net-core

我初始化的User info表只没有FacebookID列,并且有2条记录。现在,我添加了一个FacebookID列,以使用迁移EF核心框架练习通过Facebook进行注册。在首次调用中,添加的记录和下的2 FacebookID为null。我想第二次打电话,它必须检查FacebookID是否存在,如果存在,请返回FacebookID存在的消息。如果不存在,请添加新用户

我写了一个函数来检查,因为图像中的2个Facebookid为null,所以它不起作用

RuleFor(model => model).MustAsync((x, cancellationToken) => FacebookIdMustUnique(x.FacebookId, cancellationToken))
       .WithMessage(string.Format(Resource.Validation_Existed, Resource.FacebookId));
async Task<bool> FacebookIdMustUnique(string facebookId, CancellationToken cancellationToken = default(CancellationToken))
        {
            var user = await userService.GetAsync(x =>
               x.FacebookId.Equals(facebookId, StringComparison.InvariantCultureIgnoreCase),
                cancellationToken
            );

            return user == null;
        }

image description here

1 个答案:

答案 0 :(得分:0)

  

我写了一个函数来检查,因为图像中的2个Facebookid为null,所以它不起作用

nullnull时,以下代码将插入此行:

x.FacebookId.Equals(facebookId, StringComparison.InvariantCultureIgnoreCase)

要解决此问题,在调用其.Equals()方法之前,需要考虑它是否为null

async Task FacebookIdMustUnique(string facebookId, CancellationToken cancellationToken = default(CancellationToken))
{
    if(facebookId ==null){ return true; }

    var user = await userService.GetAsync(
        x => x.FacebookId.Equals(facebookId, StringComparison.InvariantCultureIgnoreCase),
        cancellationToken
    );
    return user == null;
}

在您的情况下,如果facebook id为true可能很好,所以我只返回Nullable

提醒一下:flexbox类型检查是否为空始终是一个好习惯。

相关问题