繁体   English   中英

MVC数据注释

[英]MVC data annotations

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

在此处输入图片说明

有没有一种使用此类添加数据注释的方法/技术?

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

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

自从自动创建Answer之后,似乎需要额外的工作(类和Create()方法中的绑定)。 如果我可以仅添加数据注释,那就太好了。

如果无法做到这一点,那么我唯一的选择是创建一个“ AnswerDuplicate”类并使用它代替Answer类吗?

我的建议是: 使用ViewModels

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

这将如何帮助您?
在视图中显示它的逻辑(带有RequiredDataType和诸如此类的验证)可以留给ViewModel; 而您的模型只是作为普通的“所有意图和目的”类(在您的情况下,是生成的类)保留。

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


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

然后,这节省了您编写代码行以更新实体的时间-这可能实际上需要随时间进行更改-如果要在不同类之间重构/添加额外的属性,这可能是个问题(也是一个巨大的PITA)。


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

假设您有3种不同用途的视图(添加,编辑,删除)

如果(由于某种原因)您只需要在一个特定的视图中显示/显示不同的内容,则可以只在相关的 ViewModel中应用/更改逻辑; 而不用担心更新模型和重大更改会影响其他所有方面。


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

我确实希望这会有所帮助:)

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM