C# 如何将其保存在实体中
假设我有一个大实体,并希望创建一个典型的CRUD应用程序。用户不应该有能力保存我的实体的某些字段 因此,我看到了两种实现更改保存逻辑的方法: (a)C# 如何将其保存在实体中,c#,entity-framework,crud,C#,Entity Framework,Crud,假设我有一个大实体,并希望创建一个典型的CRUD应用程序。用户不应该有能力保存我的实体的某些字段 因此,我看到了两种实现更改保存逻辑的方法: (a) 从数据库获取实体 输出到包含所有字段的页面(用户不应更改为隐藏输入的字段) 以邮寄方式取得实体 附加到上下文并保存 在这种情况下,我需要在页面上显示无用的字段。毫无疑问,这很糟糕 (b) 从数据库获取实体 仅显示必要字段(用户可以更改的字段) 以邮寄方式取得实体 从数据库获取实体 用新值填充数据库实体并保存 在这种情况下,我需要对数据库进行额外的查
什么是正确的方法?建议对不同的任务使用不同的
视图模型。如果要向用户显示要编辑的Model
的某些字段,则可以使用EditModel
并在保存时使用CreateModel
创建和填充数据库。这样可以避免用户知道数据库结构,从而确保保护和安全。或C):
从数据库获取实体
仅使用允许的字段将实体映射到ViewModel
将带有数据的ViewModel发布回控制器
将ViewModel映射回实体
附加并保存
编辑:
我强烈推荐来回映射有趣的是,我刚刚观看了朱莉·勒曼(Julie Lerman)制作的视频,她在视频中讨论了几乎完全相同的问题。你的两个解决方案都不是她想要的:
有一个单独的实体类,其中包含要在屏幕上显示的字段,但仍然映射到与常规实体类相同的表。然后只需查询该数据库集以获取实体(仅包含这些字段),并将更新保存到该数据库集
她在讨论在实体框架之上实现领域驱动设计时提到了这一点。因此,如果应用程序中的不同函数具有不同的DbContext,则仍可以使用写入表的DbContext,但可以限制该上下文可以写入的字段。“将ViewModel映射回实体”如何操作?在哪里可以得到实体?您的实体是最终返回数据库的实体,换句话说,它是代码优先模型或实体框架模型中的类