当我在 EF 5 中使用这个存储过程时,它 returns 总是 0
When I use this stored procedure in EF 5 it returns always 0
ALTER proc [dbo].[ReadReviewCountByHotelId]
@HotelId uniqueidentifier
AS
-- Returns the review count for given hotel.
BEGIN
SELECT Count(r.ReviewId) as ReviewCount
FROM Review r
WHERE r.Review_HotelId = @HotelId
END;
当我在 EF 5 中使用此存储过程时,它 returns 始终为 0。
我其他程序没有问题。
public static int ReadReviewCountByHotelId(Guid? hotelId)
{
int reviewCount = 0;
try
{
var tEntities = new TravelEntities();
Int32.TryParse(tEntities.ReadReviewCountByHotelId(hotelId).ToString(),out reviewCount);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return reviewCount;
}
EF 函数作为
public virtual ObjectResult<Nullable<int>> ReadReviewCountByHotelId(Nullable<System.Guid> hotelId)
{
var hotelIdParameter = hotelId.HasValue ?
new ObjectParameter("HotelId", hotelId) :
new ObjectParameter("HotelId", typeof(System.Guid));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Nullable<int>>("ReadReviewCountByHotelId", hotelIdParameter);
}
我在我的项目中使用 EF。第一次看到这个问题
感谢您的关注
不知道你是否真的传入了一个有效的id。但是尝试:
开启 NoCount
作为存储过程中的第一行?这可能是罪魁祸首。
一般来说,将其设为标量函数?更适合您的工作。
未检查 TryParse 的 return 值。如果以下行无法解析结果,则它 return 为 false 并且不会更改已初始化为零的 reviewCount 的值。它不会抛出异常。
Int32.TryParse(tEntities.ReadReviewCountByHotelId(hotelId).ToString(),out reviewCount);
对结果的 ToString() 调用看起来很可疑,因为 return 值是 T 的 ObjectResult。这似乎是 enumerable/list 实现的包装器。它可能不是 returning 存储过程中缩放器结果集的字符串表示形式。我认为该行应该更像:
reviewCount = tEntities.ReadReviewCountByHotelId(hotelId).First().Value
ALTER proc [dbo].[ReadReviewCountByHotelId]
@HotelId uniqueidentifier
AS
-- Returns the review count for given hotel.
BEGIN
SELECT Count(r.ReviewId) as ReviewCount
FROM Review r
WHERE r.Review_HotelId = @HotelId
END;
当我在 EF 5 中使用此存储过程时,它 returns 始终为 0。 我其他程序没有问题。
public static int ReadReviewCountByHotelId(Guid? hotelId)
{
int reviewCount = 0;
try
{
var tEntities = new TravelEntities();
Int32.TryParse(tEntities.ReadReviewCountByHotelId(hotelId).ToString(),out reviewCount);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return reviewCount;
}
EF 函数作为
public virtual ObjectResult<Nullable<int>> ReadReviewCountByHotelId(Nullable<System.Guid> hotelId)
{
var hotelIdParameter = hotelId.HasValue ?
new ObjectParameter("HotelId", hotelId) :
new ObjectParameter("HotelId", typeof(System.Guid));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Nullable<int>>("ReadReviewCountByHotelId", hotelIdParameter);
}
我在我的项目中使用 EF。第一次看到这个问题
感谢您的关注
不知道你是否真的传入了一个有效的id。但是尝试:
开启 NoCount
作为存储过程中的第一行?这可能是罪魁祸首。
一般来说,将其设为标量函数?更适合您的工作。
未检查 TryParse 的 return 值。如果以下行无法解析结果,则它 return 为 false 并且不会更改已初始化为零的 reviewCount 的值。它不会抛出异常。
Int32.TryParse(tEntities.ReadReviewCountByHotelId(hotelId).ToString(),out reviewCount);
对结果的 ToString() 调用看起来很可疑,因为 return 值是 T 的 ObjectResult。这似乎是 enumerable/list 实现的包装器。它可能不是 returning 存储过程中缩放器结果集的字符串表示形式。我认为该行应该更像:
reviewCount = tEntities.ReadReviewCountByHotelId(hotelId).First().Value