【发布时间】:2013-09-19 11:59:27
【问题描述】:
我有一个 .NET 服务(使用 Entity Framework 6.0.0-rc-1)
public class MyController : ApiController
{
protected DbConnection _connection = new DbConnection();
public HttpResponseMessage MyProcedure1()
{
...
var dayPlans = _connection.DayPlans
.Where(dp => dp.period >= start && dp.period < end);
if (dayPlans.Count() > 0)
{
//success
}
else
{
//fail
}
...
}
public HttpResponseMessage MyProcedure2()
{
...
var dayPlans = _connection.DayPlans
.Where(dp => dp.period >= start && dp.period < end);
if (dayPlans.Count() > 0)
{
//success
}
else
{
//fail
}
...
}
}
客户端同时使用这些程序。事情是有时 dayPlans.Count() 等于零,而它不应该。我已经仔细检查了过滤参数和数据库内容,必须从 db 中选择的记录很少,但它们不是。
另一个重要的时刻是当一种方法中的 LINQ 请求失败时,它总是在另一种方法中失败。但是当这些过程被一个接一个地调用时,它们可能会在所有可能的变体中失败——第一个请求失败,第二个成功;第一次失败第二次失败;等等
可能是什么问题?
【问题讨论】:
-
你已经展示了两种做同样事情的方法——为什么?另请注意,使用
Any()比使用Count() > 0更清晰,并且在某些情况下效率更高。 -
什么是
DbConnection?是数据上下文吗? -
start和end设置在哪里? -
1) 他们不做同样的事情,只是初始数据很常见。 2)
DbConnection是DbContext3)start和end在上面设置。var now = DateTime.Now; var start = now.Subtract(new TimeSpan(now.Hour, now.Minute, now.Second)); var end = now.AddDays(1).Subtract(new TimeSpan(now.Hour, now.Minute, now.Second));
标签: c# linq entity-framework linq-to-entities entity-framework-6