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
,然后将其发送以进行更新。因为我在隐藏字段中保留了我的原始实体实例,所以当我保存时我有原始时间戳用于并发检查。
我试图克服的障碍是:
- 如何进行 serialization/deserialization 的
UnderlyingEntity
属性 往返。我可以很容易地在视图中对其进行序列化,但是如何在发布表单时将其恢复为原始类型?我想我需要一个 ModelBinder 或 ValueProvider,但我不确定从哪里开始。
- 我还想 encrypt/decrypt(编辑:或散列)该值,这样它就不会以纯文本形式位于隐藏字段中。如果是纯文本,用户基本上可以通过开发人员工具对其进行编辑。我想如果我解决了#1,我可以一起做这个。
没有。这不是如何处理 EF 中的并发。
最佳做法是以下步骤:
- 在您的实体上添加行版本或时间戳类型的新 属性。 EF 将使用此列在更新时将行的版本检查到数据库中。如果该值与存储在数据库中的当前值不同,则会抛出异常。
- 在您的 Razor wiew 中,只需将行版本的值存储到一个隐藏字段中。 (它将生成一个 Base 64 字符串,就像在评论中发现的 Stephen Muecke 一样)
- 当用户将编辑后的数据发送回您的应用程序时,您将视图模型映射到您的实体。
- 保存数据时 EF 会抛出异常
DbUpdateConcurrencyException
,捕获该异常。在 catch 块中,你可以做你想做的事。
要了解更多信息,请转到此 link => https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/handling-concurrency-with-the-entity-framework-in-an-asp-net-mvc-application
我正在开发一个 ASP.NET MVC 应用程序,我正在尝试弄清楚如何支持乐观并发。我现在正在使用的方法是让 Web 应用程序检索一个实体的实例(只是一个 POCO),并从中构建一个 ViewModel。 ViewModel 将包含一个 object UnderlyingEntity
属性 来保存实体本身的实例。我可以将 UnderlyingEntity
属性 放在视图的隐藏字段中,然后在提交视图时,将更改应用到 UnderlyingEntity
,然后将其发送以进行更新。因为我在隐藏字段中保留了我的原始实体实例,所以当我保存时我有原始时间戳用于并发检查。
我试图克服的障碍是:
- 如何进行 serialization/deserialization 的
UnderlyingEntity
属性 往返。我可以很容易地在视图中对其进行序列化,但是如何在发布表单时将其恢复为原始类型?我想我需要一个 ModelBinder 或 ValueProvider,但我不确定从哪里开始。 - 我还想 encrypt/decrypt(编辑:或散列)该值,这样它就不会以纯文本形式位于隐藏字段中。如果是纯文本,用户基本上可以通过开发人员工具对其进行编辑。我想如果我解决了#1,我可以一起做这个。
没有。这不是如何处理 EF 中的并发。
最佳做法是以下步骤:
- 在您的实体上添加行版本或时间戳类型的新 属性。 EF 将使用此列在更新时将行的版本检查到数据库中。如果该值与存储在数据库中的当前值不同,则会抛出异常。
- 在您的 Razor wiew 中,只需将行版本的值存储到一个隐藏字段中。 (它将生成一个 Base 64 字符串,就像在评论中发现的 Stephen Muecke 一样)
- 当用户将编辑后的数据发送回您的应用程序时,您将视图模型映射到您的实体。
- 保存数据时 EF 会抛出异常
DbUpdateConcurrencyException
,捕获该异常。在 catch 块中,你可以做你想做的事。
要了解更多信息,请转到此 link => https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/handling-concurrency-with-the-entity-framework-in-an-asp-net-mvc-application