繁体   English   中英

ASP.NET MVC中ViewModel属性的往返转换

[英]Round trip transformation of ViewModel property in ASP.NET MVC

我正在研究ASP.NET MVC应用程序,并且试图弄清楚如何支持开放式并发。 我现在正在研究的方法是让Web应用程序检索一个实体的实例(只是POCO),并从中创建一个ViewModel。 ViewModel将包含一个object UnderlyingEntity属性,该属性包含实体本身的实例。 我可以将UnderlyingEntity属性放在视图的隐藏字段中,然后在提交视图时,将更改应用于UnderlyingEntity ,然后将其发送以进行更新。 由于我将原始实体实例保留在隐藏字段中,因此在保存时,我具有用于并发检查的原始时间戳。

我要克服的障碍是:

  1. 我该如何做UnderlyingEntity属性的往返序列化/反序列化。 我可以在视图中轻松地对其进行序列化,但是在发布表单时如何将其恢复为原始类型? 我认为我需要ModelBinder或ValueProvider,但我不确定从哪里开始。
  2. 我还想对值进行加密/解密(编辑:或散列),以使其不位于纯文本的隐藏字段中。 如果是纯文本格式,则基本上用户可以通过开发人员工具对其进行编辑。 我认为,如果我解决了#1,我可以做到这一点。

不。 这不是在EF中处理并发的方法。

最佳做法是以下步骤:

  • 在您的实体上添加行类型或时间戳类型的新属性。 EF将使用此列在更新时将行的版本检查到数据库中。 如果该值与存储在数据库中的当前值不同,则它将引发异常。
  • 在Razor中,只需将行版本的值存储到隐藏字段中即可。 (它将生成一个Base 64字符串,例如在评论中发现的Stephen Muecke)
  • 当用户在编辑完应用程序后将数据发送回时,您会将视图模型映射到您的实体。
  • 保存数据时,EF将引发异常DbUpdateConcurrencyException ,捕获该异常。 在catch块中,您可以执行所需的操作。

要了解有关此内容的更多信息,请转到此链接=> https://docs.microsoft.com/zh-cn/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/handling-concurrency -with最实体框架功能于一个-ASP净MVC-应用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM