Asp.net mvc C#MVC仅使用实体框架保存视图模型的更改元素
我有一个项目,多个用户可以同时查看同一页的数据,并对其进行更改。因此,将发生丢失更新问题 我想知道是否有任何框架或模式可以遵循,这将处理优雅。因此,如果有人只更改视图模型中的一个字段,我只想更新数据库中的这一列 目前,我将视图模型发布回控制器、验证,然后自动映射到实体框架类 作为一个恰当的示例,假设我的视图模型如下所示:Asp.net mvc C#MVC仅使用实体框架保存视图模型的更改元素,asp.net-mvc,entity-framework,asp.net-mvc-4,viewmodel,asp.net-mvc-viewmodel,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,Viewmodel,Asp.net Mvc Viewmodel,我有一个项目,多个用户可以同时查看同一页的数据,并对其进行更改。因此,将发生丢失更新问题 我想知道是否有任何框架或模式可以遵循,这将处理优雅。因此,如果有人只更改视图模型中的一个字段,我只想更新数据库中的这一列 目前,我将视图模型发布回控制器、验证,然后自动映射到实体框架类 作为一个恰当的示例,假设我的视图模型如下所示: public class MyViewModel { public int Id { get; set; } public int Num1 { get; se
public class MyViewModel
{
public int Id { get; set; }
public int Num1 { get; set; }
public int Num2 { get; set; }
}
Id = 1
Num1 = 10
Num2 = 20
数据库中只有1行,如下所示:
public class MyViewModel
{
public int Id { get; set; }
public int Num1 { get; set; }
public int Num2 { get; set; }
}
Id = 1
Num1 = 10
Num2 = 20
然后在加载页面时将其读入视图模型
如果人员A和人员B同时使用该网站浏览该记录,则其屏幕上的Num1和Num2分别为10和20
人员A将Num1设置为15,然后按save
然后,人员B将Num2更改为25,并按save。但是,由于保存了整个视图模型,因此人员A的Num1=15更改丢失,并被人员B记录中的10覆盖
是否有人可以推荐使用MVC的web框架来避免此问题?最好的解决方案可能是在模型更新时使用类似Signal的东西来更新其他用户的对象: 一个没有太多麻烦的更简单/更粗糙的实现可能是这样的:
public class MyViewModel
{
public int Id { get; set; }
public int Num1 { get; set; }
public int Num2 { get; set; }
public int Num1Orig { get; set; }
public int Num2Orig { get; set; }
}
将_Orig作为隐藏字段包含在视图中。然后在文章中,从数据库中获取当前对象,将新模型值与原始值进行比较,并仅在实体对象发生更改时更新实体对象。解决此问题的另一个方法是将系统从基于CRUD的系统中删除 这些工具的一些示例: 指挥体系结构/CQRS
Num1为0,如果用户A将Num1更新为5,用户B将Num更新为10,正确答案是什么?是五点吗?是10点吗?是15号吗?只有人类才能确定这一点。您可以按照此链接中的建议进行操作。有任何建议解决了您的问题吗?没有,但一天晚上,一些进一步的研究发表了这篇有趣的文章:这是最后一个wins数据持久性介质的教科书答案。