Asp.net mvc 在MVC中,如何编辑内存中的记录而不首先保存到数据库
我在MVC中有一个场景,我使用OPEN XML上传Excel文件以读取电子表格,但是我还不想将这些记录保存到数据库中,因为我对记录执行验证,如果验证成功,我会将记录保存到数据库中,这是出于性能原因,因为我可以在excel电子表格中有1000条记录,如果我首先将记录保存到数据库中,我可以很好地进行编辑,我只需按Id从数据库中读取记录,修改,然后更新/保存更改。我不想这样做,我需要让我的应用程序读取内存中的记录编辑,重新验证,然后只保存有效数据,我如何在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中做到这一点,请参阅下面我的当前代码,它
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文件:
Validation
因为我不知道您的环境和验证标准,所以我很难向您提供任何代码。但也许上面的列表可以帮助你 我理解你的意思对吗:你想上传一些Excel文件,然后把它们放在内存中,然后在你的视图中编辑它们?如果一切正常,你想将它们保存在数据库中吗?是的,这正是我想做的,我不想将记录保存到数据库中,因为我需要验证它们,如果它们有效,那么我才保存到数据库中,原因是我有1000条记录。我理解你的意思:你想上传一些Excel文件,然后让它们在内存中并在视图中编辑它们?如果一切正常,你想将它们保存到数据库中吗?是的,这正是我想做的,我不想将记录保存到数据库中,因为我需要验证它们,如果它们有效,那么我才保存到数据库中,原因是我有1000条记录很好的解释,就像这样我知道,我的问题是性能方面的,我将采取将数据写入临时数据库的方法,我知道这将被视为一个ne