DbContext.SaveChanges()方法不提交到SQL Server数据库

时间:2017-01-27 05:32:15

标签: c# asp.net-mvc entity-framework linq

这是我的代码,它是ASP.NET MVC控制器Action的一部分(通过单击按钮触发)

using(var context = new EDIDEVEntities())
{
    var result = from b in context.DOWNLOAD_ORDER_HEADER.Where(b => csgList.Contains(b.PRO_NUM_ALPHA)) select b;

    foreach (var item in result)
    {
        item.STATUS = "Assigned";
    }

    context.SaveChanges();
}

它不会抛出任何错误,但数据库中的记录不会更新。

我尝试使用这一行:

context.Entry(result).State = EntityState.Modified;
在foreach循环之前

,但它会抛出一个错误,表示

  

实体类型DbQuery`1不是当前上下文的模型的一部分

我知道实际的代码行应该是这样的:

DOWNLOAD_ORDER_HEADER doh;
context.Entry(doh).State = EntityState.Modified;

但是我只需要为我的LINQ查询返回的行更新DOWNLOAD_ORDER_HEADER表的一个字段。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

你不需要改变context.Entry(item).State如果你实际修改了item.STATUS,如果item.STATUS已经等于" Assigned",显然是Entity Framework因为没有变化,所以不会进行更新。

对于测试,这是正确更改实体状态,您需要设置结果中每个项目的状态为循环:

var result = from b in context.DOWNLOAD_ORDER_HEADER.Where(b => csgList.Contains(b.PRO_NUM_ALPHA)) select b;
foreach (var item in result)
{
    item.STATUS = "Assigned";
    context.Entry(item).State = EntityState.Modified;
}

为什么Entity Framework没有自动将每个DOWNLOAD_ORDER_HEADER实体的状态设置为Modified是奇怪的,如果item.STATUS是其他的那么" Assigned"然后是context.SaveChanges();在for循环之后应该对数据库执行更新。

同时,为for循环中的每个项目手动执行context.Entry(item).State = EntityState.Modified;将证明或不证明您的数据库正在更新。

您是否将此代码包装在try catch块中,并且实际上会抛出异常并且可能正在处理它?<​​/ p>

答案 1 :(得分:-1)

请尝试以下代码,希望这对您有帮助。

context。“你的数据库表”.AddObject(result);  context.SaveChanges();