gpt4 book ai didi

c# - 如何检查 Dapper QueryMultiple 是否返回结果

转载 作者:太空宇宙 更新时间:2023-11-03 15:38:41 25 4
gpt4 key购买 nike

我有一个采用可选参数的存储库方法,它可能返回也可能不返回任何记录。如果查询返回记录,一切正常,但如果没有结果,那么我会在 Dapper 中抛出异常。 connection 或 multi 上似乎没有方法允许我检查是否有在尝试读取之前返回的结果集。有没有办法做到这一点,或者我在这里做了一些不合逻辑的事情?

    public ICustomer GetCustomer(int? custId = null, string email = null, string phoneNumber = null)
{
using (var connection = GetConnection())
{
using (var multi = connection.QueryMultiple("BusinessEntity.usp_Customer_GetCustomer",
new { CustId = custId, Email = email, Phone = phoneNumber },
commandType: CommandType.StoredProcedure))
{
Exception -> var customer = multi.Read<Customer>().SingleOrDefault();

//customer.Address = multi.Read<Address>() as IList<IAddress>;
//customer.Phone = multi.Read<Phone>() as IList<IPhone>;

return customer;
}
}
}

异常(exception)是

No columns were selected

        if (reader.FieldCount <= startBound)
{
throw MultiMapException(reader);
}

最佳答案

这实际上是我的存储过程逻辑中的一个缺陷。我有条件地跳过了我根据先前对客户 ID 的查询实际执行多项选择的部分。

ALTER PROCEDURE [BusinessEntity].[usp_Customer_GetCustomer]
@CustId INT = NULL,
@Email VARCHAR(100) = NULL,
@Phone VARCHAR(100) = NULL
AS
BEGIN TRAN;
IF @CustId IS NULL
BEGIN
SELECT @CustId = c.CustomerId
...
END;
IF @@ROWCOUNT > 1 AND @Cust IS NOT NULL --Wrong
IF @CustId IS NULL @CustId = 0 --Sort of correct
BEGIN
SELECT ...
SELECT ...
SELECT ...
END;
COMMIT;
RETURN 0;

关于c# - 如何检查 Dapper QueryMultiple 是否返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30970173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com