更新从方法返回的对象时,为什么实体框架不保存更改?

时间:2012-07-30 13:02:33

标签: entity-framework-4

我正在使用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
        };
    }
}

0 个答案:

没有答案