首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC数据标注

MVC数据标注
EN

Stack Overflow用户
提问于 2016-06-27 03:08:24
回答 2查看 127关注 0票数 0

我使用的是实体框架。它自动生成了一个答案类。但我不能修改这个类,因为如果重新生成代码,它将被覆盖。

有没有一种方法/技术可以使用这个类添加数据注释?

我问这个问题的原因是我有一个使用Answer类的Create Answer视图。因此,我想添加诸如Required等数据注释。

如果我不能向Answer类添加数据注释,那么我必须创建一个"AnswerDuplicate“类,将其传递给视图,并在我的Create()方法中使用它。但是,我必须将AnswerDuplicate中的所有值映射到Answer的一个实例,因为Answer是我“添加”到实体的内容。

因为Answer是自动创建的( Create()方法中的类和绑定),所以看起来像是额外的工作。如果我只需要添加数据注释就好了。

如果这是不可能的,那么我唯一的选择是创建一个"AnswerDuplicate“类并使用它来代替Answer类吗?

EN

回答 2

Stack Overflow用户

发布于 2016-06-27 03:31:23

我的建议是:使用ViewModels

在编辑/查看数据时,我总是考虑创建一个ViewModel,而不是将模型对象直接传递给视图。

这会有什么帮助?

在视图中显示它的逻辑(使用RequiredDataType和验证之类的)可以留给ViewModel;而您的模型只是一个普通的全意图和目的类(在您的例子中,是一个生成的类)。

例如,您可以有一个包含所有显示/验证逻辑的AnswerViewModel,然后在相应的视图中使用。

如何保存时间映射属性?

您可以使用 (或其他类似的自动映射包)自动映射模型和视图模型之间的属性,以便于更新实体等。

这就为你节省了大量的时间来编写代码来更新实体--这实际上可能需要随着时间的推移而改变--如果跨不同的类重构/添加额外的属性,这可能是一个很大的问题(也是一个巨大的问题)。

这对未来有什么帮助?

嗯,因为你没有把逻辑留给你的班级:

假设你有3个不同的视图用于不同的目的(添加,编辑,删除)

如果(由于某些原因)您只需要在一个特定视图中以不同的方式显示/显示某些内容,您可以只应用/更改相关ViewModel中的逻辑;而不必担心更新模型并使破坏性更改影响其他所有内容。

这里有一个关于如何在MVC中使用ViewModels的实用教程:http://rachelappel.com/use-viewmodels-to-manage-data-amp-organize-code-in-asp-net-mvc-applications/

我真的希望这能有所帮助:)

如果你需要我提供任何例子--只要让我知道。

票数 3
EN

Stack Overflow用户

发布于 2016-06-27 04:19:24

我认为最好的解决方案是像@Geoff James所说的那样使用ViewModels,但如果你不喜欢添加不同的类,你可以编写一个分部类并向其添加MetadataType属性,并将所需的属性添加到其属性中。

代码语言:javascript
复制
public partial class Answer  // this is auto-generated
{
    public long AnswerID {set; get;}
}

[MetadataType(typeof(Answer ))]
public partial class Answer // this is what you can write
{
    [Required]
    public long AnswerID {set; get;}
}

请记住,这两个类必须具有相同的名称空间。

您的问题的其他解决方案是您可以先切换到Code

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

https://stackoverflow.com/questions/38042196

复制
相关文章

相似问题

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