我正在使用Entity Framework 4.0,我遇到了一个奇怪的问题。
我想更新实体并将其保存到db(在此示例中更新RequestStatusId的值)。起初,我写道:
var ro = new RequestsOperator();
var reqResponse = ro.FindRequest(requestId);
if (reqResponse.IsSuccess)
{
var req = reqResponse.Item;
req.RequestStatusId = (int)newStatus;
if (context.SaveChanges() > 0)
{
//
}
else
{
// always goes here
}
}
但context.SaveChanges()始终不是> 0.我查看了SQL Profile,没有执行“UPDATE”语句。我将我的代码更改为:
var q = context.Requests.Where(p => p.Id == requestId).SingleOrDefault();
if (null != q)
{
q.RequestStatusId = (int)newStatus;
if (context.SaveChanges() > 0)
{
// can successfully update database
}
else
{
//
}
}
然后它有效。
但我想知道为什么第一个不能保存更改?
我想使用ro.FindRequest(requestId)方法而不是写另一个“var q = context ...”,因为FindRequest的逻辑将来可能会改变,我不想在任何地方改变代码。
PS:这是FindRequest()方法。
public Response<Requests> FindRequest(int requestId)
{
// it may have some further logics in the future
var query = context.Requests.Where(p => p.Id == requestId).SingleOrDefault();
if (null != query)
{
return new Response<Requests>()
{
IsSuccess = true,
Message = string.Empty,
Item = query
};
}
else
{
return new Response<Requests>()
{
IsSuccess = false,
Message = "Cannot find the request",
Item = null
};
}
}