Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 在MVC中,如何编辑内存中的记录而不首先保存到数据库_Asp.net Mvc_Entity Framework_Asp.net Mvc 4 - Fatal编程技术网

Asp.net mvc 在MVC中,如何编辑内存中的记录而不首先保存到数据库

Asp.net mvc 在MVC中,如何编辑内存中的记录而不首先保存到数据库,asp.net-mvc,entity-framework,asp.net-mvc-4,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,我在MVC中有一个场景,我使用OPEN XML上传Excel文件以读取电子表格,但是我还不想将这些记录保存到数据库中,因为我对记录执行验证,如果验证成功,我会将记录保存到数据库中,这是出于性能原因,因为我可以在excel电子表格中有1000条记录,如果我首先将记录保存到数据库中,我可以很好地进行编辑,我只需按Id从数据库中读取记录,修改,然后更新/保存更改。我不想这样做,我需要让我的应用程序读取内存中的记录编辑,重新验证,然后只保存有效数据,我如何在MVC中做到这一点,请参阅下面我的当前代码,它

我在MVC中有一个场景,我使用OPEN XML上传Excel文件以读取电子表格,但是我还不想将这些记录保存到数据库中,因为我对记录执行验证,如果验证成功,我会将记录保存到数据库中,这是出于性能原因,因为我可以在excel电子表格中有1000条记录,如果我首先将记录保存到数据库中,我可以很好地进行编辑,我只需按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");
}
公共异步任务编辑(int?id)
{
if(id==null)
{
返回新的HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
CleanSupplierClaim cleanData=await db.CleanSupplierClaims.FindAsync(id);
if(cleanData==null)
{
返回HttpNotFound();
}
返回视图(cleanData);
}
//POST:/Claim/Edit/5
//若要防止套印攻击,请启用要绑定到的特定属性,例如
//更多详细信息请参见http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务编辑([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)
{
如果(cleanData.Id==0)
{
db.CleanSupplierClaims.Add(cleanData);
}
其他的
{
db.Entry(cleanData).State=System.Data.Entity.EntityState.Modified;
}
等待db.saveChangesSync();
//返回PartialView();
}
返回RedirectToAction(“RedirectToValidateClaimsView”);
}

提前感谢

HTTP是无状态的。你必须在某个地方写数据

“某处”可以是:

  • 页面内数据(隐藏表单字段、JavaScript变量等)
  • 在cookies中(不太适合于大量数据)
  • 会话状态
  • 在静态变量中(由于几个原因,在web应用程序中可能不太好,但仍然是一个选项)
  • 归档
  • 在单独的数据库中(可能只是该应用程序的本地SQL数据库文件,也可能是文档数据库等)
  • 在主数据库中,但在单独的表中(用于保存尚未提交到“真实”表的“临时”数据的表)
  • 等等

关键是,你必须在某个地方写数据。它不必是主数据库表。但是,如果对web应用程序的不同请求需要对相同的持久数据进行操作,那么该数据需要在某个地方持久化。

HTTP是无状态的。你必须在某个地方写数据

“某处”可以是:

  • 页面内数据(隐藏表单字段、JavaScript变量等)
  • 在cookies中(不太适合于大量数据)
  • 会话状态
  • 在静态变量中(由于几个原因,在web应用程序中可能不太好,但仍然是一个选项)
  • 归档
  • 在单独的数据库中(可能只是该应用程序的本地SQL数据库文件,也可能是文档数据库等)
  • 在主数据库中,但在单独的表中(用于保存尚未提交到“真实”表的“临时”数据的表)
  • 等等

关键是,你必须在某个地方写数据。它不必是主数据库表。但是,如果对web应用程序的不同请求需要对相同的持久数据进行操作,则该数据需要在某个位置持久化。

如果要验证Excel文件:

  • 创建一个名为
    Validation
  • 在这个类中创建一个方法,您可以在其中验证excel文件
  • 对于有效或无效,返回true或false
  • 对于每个excel文件,请调用此方法,如果该方法有效,请将其与所有其他有效excel文件一起添加到列表中
  • 在数据库中保存所有有效的excel文件

  • 因为我不知道您的环境和验证标准,所以我很难向您提供任何代码。但也许上面的列表可以帮助你

    如果要验证Excel文件:

  • 创建一个名为
    Validation
  • 在这个类中创建一个方法,您可以在其中验证excel文件
  • 对于有效或无效,返回true或false
  • 对于每个excel文件,请调用此方法,如果该方法有效,请将其与所有其他有效excel文件一起添加到列表中
  • 在数据库中保存所有有效的excel文件

  • 因为我不知道您的环境和验证标准,所以我很难向您提供任何代码。但也许上面的列表可以帮助你

    我理解你的意思对吗:你想上传一些Excel文件,然后把它们放在内存中,然后在你的视图中编辑它们?如果一切正常,你想将它们保存在数据库中吗?是的,这正是我想做的,我不想将记录保存到数据库中,因为我需要验证它们,如果它们有效,那么我才保存到数据库中,原因是我有1000条记录。我理解你的意思:你想上传一些Excel文件,然后让它们在内存中并在视图中编辑它们?如果一切正常,你想将它们保存到数据库中吗?是的,这正是我想做的,我不想将记录保存到数据库中,因为我需要验证它们,如果它们有效,那么我才保存到数据库中,原因是我有1000条记录很好的解释,就像这样我知道,我的问题是性能方面的,我将采取将数据写入临时数据库的方法,我知道这将被视为一个ne