[英]MVC data annotations
我正在使用实体框架。 它会自动生成一个Answer类。 但是我无法修改此类,因为如果重新生成代码,它将被覆盖。
有没有一种使用此类添加数据注释的方法/技术?
我问的原因是我有一个使用Answer类的Create Answer视图。 因此,我想添加数据注释,例如Required等。
如果无法将数据注释添加到Answer类,则必须创建“ AnswerDuplicate”类,将其传递到视图中,并在我的Create()方法中使用它。 但是,然后我必须将AnswerDuplicate中的所有值映射到Answer的实例,因为Answer是我“添加”到实体的对象。
自从自动创建Answer之后,似乎需要额外的工作(类和Create()方法中的绑定)。 如果我可以仅添加数据注释,那就太好了。
如果无法做到这一点,那么我唯一的选择是创建一个“ AnswerDuplicate”类并使用它代替Answer类吗?
我的建议是: 使用ViewModels 。
我总是考虑在编辑/查看数据时创建ViewModel-而不是将模型对象直接传递到视图。
这将如何帮助您?
在视图中显示它的逻辑(带有Required
, DataType
和诸如此类的验证)可以留给ViewModel; 而您的模型只是作为普通的“所有意图和目的”类(在您的情况下,是生成的类)保留。
例如,您可能有一个AnswerViewModel
,其中包含所有显示/验证逻辑,然后可以在相应的View中使用。
如何保存时间映射属性?
您可以使用AutoMapper (或其他类似的自动映射包)来自动在模型和视图模型之间映射属性,以方便实体等的更新。
然后,这节省了您编写代码行以更新实体的时间-这可能实际上需要随时间进行更改-如果要在不同类之间重构/添加额外的属性,这可能是个大问题(也是一个巨大的PITA)。
这对未来有何帮助?
好吧, 因为您没有将逻辑留给班级:
假设您有3种不同用途的视图(添加,编辑,删除)
如果(由于某种原因)您只需要在一个特定的视图中显示/显示不同的内容,则可以只在相关的 ViewModel中应用/更改逻辑; 而不用担心更新模型和重大更改会影响其他所有方面。
我确实希望这会有所帮助:)
如果您需要我提供任何示例,请告诉我。
我认为最好的解决方案是像@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.