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中使用此存储过程时,它始终返回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。我第一次看到这个问题。
感谢您的关注
答案 0 :(得分:2)
未检查TryParse的返回值。如果以下行无法解析结果,则返回false并且不会更改已初始化为零的reviewCount的值。它没有抛出异常。
Int32.TryParse(tEntities.ReadReviewCountByHotelId(hotelId).ToString(),out reviewCount);
对结果的ToString()调用看起来很可疑,因为返回值是T的ObjectResult。它似乎是可枚举/列表实现的包装器。它可能不会从存储过程返回缩放器结果集的字符串表示形式。我认为这条线看起来应该更像:
reviewCount = tEntities.ReadReviewCountByHotelId(hotelId).First().Value
答案 1 :(得分:0)
不知道您是否确实传入了有效的身份证明。但试试:
将NoCount设为
作为你的第一行?这可能是罪魁祸首。
一般来说,这是一个标量函数吗?更适合你正在做的事情。