【问题标题】:MVC data annotationsMVC 数据注解
【发布时间】:2016-06-26 19:08:23
【问题描述】:

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

是否有使用此类添加数据注释的方法/技术?

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

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

似乎是额外的工作,因为 Answer 是自动创建的(类和 Create() 方法中的绑定)。如果我可以添加数据注释会很好。

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

【问题讨论】:

标签: c# entity-framework model-view-controller data-annotations


【解决方案1】:

我的建议是:使用 ViewModels

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

这有什么帮助?
在视图中显示它的逻辑(使用RequiredDataType 和验证等)可以留给 ViewModel;而您的 Model 只是作为一个普通的 all-intents-and-purposes 类(在您的情况下是一个生成的类)。

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


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

这可以节省您编写逐行代码来更新实体的时间 - 这可能本质上需要随着时间的推移而改变 - 这可能是一个问题(和一个巨大的 PITA)如果在不同的类中重构/添加额外的属性。


这对未来有何帮助?
好吧,因为你没有把逻辑留给你的班级:

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

如果(出于某种原因)您需要仅在一个特定视图中显示/显示不同的内容,您可以在相关 ViewModel 中应用/更改逻辑;而不是担心更新模型并让重大更改影响其他一切。


这是关于如何在 MVC 中使用 ViewModel 的便捷教程:http://rachelappel.com/use-viewmodels-to-manage-data-amp-organize-code-in-asp-net-mvc-applications/

我希望这会有所帮助:)

如果您需要我提供任何示例,请告诉我。

【讨论】:

    【解决方案2】:

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

    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 First

    【讨论】:

    • 感谢 Arvin - 您的回答与 Orel 的链接中发布的相同。目前,我选择使用此解决方案。目前,它很简单,而且似乎需要维护的代码更少。无需使用 Automapper 等。
    猜你喜欢
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多