假设我们有class PersonModel
,用户在浏览器中编辑了一个详细信息表单并点击了submit
按钮。
如何编写控制器逻辑以创建更新SqlComand
(无EF)并仅更新 来自class PersonModel
(FirstName, LastName, Age...
)的字段被改变了。
什么应该是/Person/Edit/<id>
控制器的参数?
答案 0 :(得分:2)
您不会对MVC代码执行任何特殊操作,也不会添加任何特殊的URL参数。
如果您只想更新已更改的字段,则必须编写大量代码。您必须获取当前记录,将每个模型字段与记录字段进行比较,找出哪些已更改,然后您必须根据更改的字段构造SQL语句,然后更新它,确保使用光学记录锁定以确保在您检索字段和更新字段之间字段没有变化。
这可能是几百行代码。或者如果您使用ORM,它可能是一行代码。
另外,请记住,您还需要使用参数化语句,以防止SQL注入攻击(也可以在ORM中免费获得)。
祝你好运,我当然不打算写下来。答案 1 :(得分:1)
我建议您不使用广义PersonModel,我假设它是数据模型的1:1表示。您应该创建一个仅包含您关注的字段的淡化视图模型。然后使用类似AutoMapper的东西将ViewModel映射回您的DomainModel。
以下是有关如何将AutoMapper用于此类场景的参考资料。
答案 2 :(得分:0)
您可以使用Linq并让datacontext为您完成所有事情。 在模型中,您只需使用linq查询创建数据类,检索对象,设置从您检索的对象中的视图传递的所有值(无论如何,您必须执行此操作,因为模式将视图与模型分离|请记住,MVC实现观察器以让视图知道模型中的更改,因此您无法知道控制器在视图中修改了什么),然后调用DataContext.SubmitChanges();方法。数据上下文将自己完成工作。它将知道要更改和修改的内容,并将进行最高性能的查询。