用于更新记录的Context.SaveChanges()仅在首次运行时才有效

时间:2014-03-03 00:37:46

标签: c# entity-framework-4

真的很抱歉打扰但是我迷路了。下面的代码令我头疼。它第一次运行它部分更新数据库,然后它不再更新它。 cm.LogoPath第一次从null更改为指定值,但cm.LogoOriginalPath未持久保存到DB(在断点处,它显示它具有值,并且该Entity设置为“已修改”)。 它运行的所有其他时间都不会更新任何内容,即使我更改了要更新的属性或要保留的值。

using (EMSDataModelContainer db = new EMSDataModelContainer())
{
    NotificationMsg msg = new NotificationMsg();
    ContactMaster cm = db.ContactMasters.Where(c => c.ContactMasterId == ContactMasterID).FirstOrDefault();
    if (cm.LogoPath != null)
    {
       msg = ImagesUpload.DeleteImage(cm.LogoOriginalPath, "", cm.LogoPath);
    }

    msg = ImagesUpload.UploadLogo(rauLogo.UploadedFiles[0].InputStream, "HotelLogo", HotelController.ContactMasterId.ToString(), rauLogo.UploadedFiles[0].GetExtension().ToString().ToLower());

    if (msg.MsgType.ToString() != "Error")
    {
        cm.LogoOriginalPath = "https://s3.amazonaws.com/seeam-imgs-test/" + "HotelLogo/" + HotelController.ContactMasterId.ToString() + "-Original" + rauLogo.UploadedFiles[0].GetExtension().ToString().ToLower();
        cm.LogoPath = "https://s3.amazonaws.com/seeam-imgs-test/" + "HotelLogo/" + HotelController.ContactMasterId.ToString() + ".jpg";
        db.ContactMasters.ApplyCurrentValues(cm); 
    }
    db.SaveChanges();
}

除此之外,这种保存设置已经在整个应用程序中运行得很好。 最后一点信息,LogoPath和OriginalLogoPath是稍后添加的2 db表列。我从数据库更新了模型。

编辑:简单地说,现在这样的事情并没有保存变化:

using (EMSDataModelContainer context = new EMSDataModelContainer())
{
   ContactMaster c = context.ContactMasters.Where(i => i.ContactMasterId == ContactMasterID).Single();
   c.LogoOriginalPath = "Why is not saving";
   context.ContactMasters.ApplyCurrentValues(c);
   context.SaveChanges();
   context.Dispose();
}

任何方向都会欣赏它。

0 个答案:

没有答案