在MVC中,如何在不保存到数据库fisrt的情况下编辑内存中的记录

时间:2016-03-03 13:51:10

标签: asp.net-mvc entity-framework asp.net-mvc-4

我在MVC中有一个场景,我使用OPEN XML上传Excel文件来阅读电子表格,但是我不想将这些记录保存到数据库中,因为我对记录执行验证,如果验证成功,我会保存记录到数据库,这是出于性能原因,因为我可以在excel电子表格中有1000条记录,如果我先将记录保存到数据库,我能够很好地编辑,我只是​​从db读取它们按Id,修改然后更新/保存更改。我不想这样做,我需要让我的应用程序读取内存中的记录编辑,重新验证然后只保存有效数据,我怎么能在MVC中执行此操作,请参阅下面我当前的代码使用首先保存记录的方法,这是我想要避免的。

public async Task<ActionResult> Edit(int? id)
    {


        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        CleanSupplierClaim cleanData = await db.CleanSupplierClaims.FindAsync(id);

        if (cleanData == null)
        {
            return HttpNotFound();
        }
        return View(cleanData);
    }

// POST: /Claim/Edit/5
// To protect from overposting attacks, please enable the specific properties you want to bind to, for 
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]

public async Task<ActionResult> Edit([Bind(Include = "Id,Action,Line_Number,Total_Claim,Currency,ClaimReference,ST_Key,Warning,Error_1,Error_2,Error,Domain_Username")] CleanSupplierClaim cleanData)
{
    if (ModelState.IsValid)
    {
        if (cleanData.Id == 0)
        {
            db.CleanSupplierClaims.Add(cleanData);
        }
        else
        {
            db.Entry(cleanData).State = System.Data.Entity.EntityState.Modified;
        }
        await db.SaveChangesAsync();
        //return PartialView();
    }
    return RedirectToAction("RedirectToValidateClaimsView");
}

提前谢谢

2 个答案:

答案 0 :(得分:2)

HTTP是无状态的。您必须在某处编写数据。

&#34;某处&#34;可能是:

  • 页面数据(隐藏表单字段,JavaScript变量等)
  • 在Cookie中(不太适合大量数据)
  • 会话状态
  • 在静态变量中(由于某些原因,在Web应用程序中可能不太好,但仍然是一个选项)
  • 在档案中
  • 在一个单独的数据库中(可能只是该应用程序的本地SQL数据库文件,或者可能是文档数据库等)。
  • 在主数据库中,但在单独的表格中(表格用于保存&#34;临时&#34;数据尚未提交到&#34;真实&#34;表格)

关键是,你必须在某处写数据。它不必必须您的主数据库表。但是,如果对Web应用程序的不同请求需要对相同的持久数据进行操作,则该数据需要在某处持久存在。

答案 1 :(得分:0)

如果要验证Excel文件:

  1. 创建一个名为Validation
  2. 的新班级
  3. 在此类中创建一个方法,您可以在其中验证您的Excel文件。
  4. 返回true或false表示有效或无效。
  5. 对于每个excel文件,请调用此方法,如果该方法有效,请将其添加到包含所有其他有效Excel文件的列表中。
  6. 将所有有效的Excel文件保存在数据库中
  7. 就我不了解您的环境或验证标准而言,我很难为您提供任何代码。但也许上面的列表可以帮助你。