首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向数据层传递两个或三个角参数的模型

向数据层传递两个或三个角参数的模型
EN

Stack Overflow用户
提问于 2019-05-06 20:07:57
回答 1查看 70关注 0票数 0

我正在为后端和实体框架开发一个基于v6的ASP.NET MVC项目。有时,有一些CRUD操作,只更新实体上的2-3个字段,在这种情况下,我可能会对这种情况下哪种方法更适合最佳实践感到困惑。例如,假设我有一个Employee实体,其属性如下所示:

员工: Id,状态,姓名,姓氏,工作,部门,HireDate,BirthDate,地址,更新.

假设状态、部门和更新字段的更新,我可以为以下方法执行此操作:

方法I:

我可以创建employee.ts文件的一个实例,并仅通过要更新的字段在component.ts中填充它,然后将其传递给service.ts并传递给Controller.cs。在Controller中,我接收作为Employee实体模型的模型,并在Controller中设置Updated字段,并将该Employee实体传递给Service.cs,然后使用相关的EF方法保存该实体。

方法II:

我只需将Id、状态和部门值从Component.ts发送到service.ts,然后将其作为int值传递给Controller (Id)。然后在控制器中创建一个Employee.cs实体的新实例,并填充这3个字段和更新字段。然后将该实体传递给Service.cs,然后使用相关的EF方法保存该实体。

方法III:

与方法II相同,直到Controller.cs为止。然后将这3个参数传递给Service,然后通过Id参数从数据库中检索员工。然后设置其他字段并保存实体。

我认为其中3种方法可以使用,但不确定在EF的角度项目中哪一种更适合这种情况?任何帮助都将不胜感激..。

EN

回答 1

Stack Overflow用户

发布于 2019-05-06 21:36:28

方法3,或

方法4:使用要更新的PK &字段创建UpdateEmployeeViewModel,以填充TS,传递给验证数据、加载实体、传输适当值和保存的控制器。当它是一两列时,那么方法3就可以了。如果它增长到更多,那么我通常选择#4。

我会不惜一切代价避免使用方法1。让代码信任从客户端传递的实体太方便了。对服务的调用可以被拦截和调整,因此如果服务器代码接受一个实体,您可以很容易地找到执行DbSet.UpdateDbSet.Attach的代码,这可能导致被篡改的数据被持久化到数据库。

在执行更新时,方法2也会留下问题,因为实体应该始终反映其数据行。创建一个实体,然后只部分填充它,然后尝试更新数据状态,可能会导致无意中的更新,例如清除值。在这条道路上,您可能有其他接受实体作为参数的通用方法,但在传递的实体可能是完整的(从DB加载)和不完整(由更新方法构造)的情况下。

按ID加载实体非常快,因此很少需要过度优化。它还可以帮助检查行版本#,以确保您正在更新的实体的版本与仍在DB中的版本相匹配。(自从您最初将该行发送给客户端以来,是否还有其他人更新了该行?)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56011737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档