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

有没有一种方法/技术可以使用这个类添加数据注释?
我问这个问题的原因是我有一个使用Answer类的Create Answer视图。因此,我想添加诸如Required等数据注释。
如果我不能向Answer类添加数据注释,那么我必须创建一个"AnswerDuplicate“类,将其传递给视图,并在我的Create()方法中使用它。但是,我必须将AnswerDuplicate中的所有值映射到Answer的一个实例,因为Answer是我“添加”到实体的内容。
因为Answer是自动创建的( Create()方法中的类和绑定),所以看起来像是额外的工作。如果我只需要添加数据注释就好了。
如果这是不可能的,那么我唯一的选择是创建一个"AnswerDuplicate“类并使用它来代替Answer类吗?
发布于 2016-06-27 03:31:23
我的建议是:使用ViewModels。
在编辑/查看数据时,我总是考虑创建一个ViewModel,而不是将模型对象直接传递给视图。
这会有什么帮助?
在视图中显示它的逻辑(使用Required、DataType和验证之类的)可以留给ViewModel;而您的模型只是一个普通的全意图和目的类(在您的例子中,是一个生成的类)。
例如,您可以有一个包含所有显示/验证逻辑的AnswerViewModel,然后在相应的视图中使用。
如何保存时间映射属性?
您可以使用 (或其他类似的自动映射包)自动映射模型和视图模型之间的属性,以便于更新实体等。
这就为你节省了大量的时间来编写代码来更新实体--这实际上可能需要随着时间的推移而改变--如果跨不同的类重构/添加额外的属性,这可能是一个很大的问题(也是一个巨大的问题)。
这对未来有什么帮助?
嗯,因为你没有把逻辑留给你的班级:
假设你有3个不同的视图用于不同的目的(添加,编辑,删除)
如果(由于某些原因)您只需要在一个特定视图中以不同的方式显示/显示某些内容,您可以只应用/更改相关ViewModel中的逻辑;而不必担心更新模型并使破坏性更改影响其他所有内容。
这里有一个关于如何在MVC中使用ViewModels的实用教程:http://rachelappel.com/use-viewmodels-to-manage-data-amp-organize-code-in-asp-net-mvc-applications/
我真的希望这能有所帮助:)
如果你需要我提供任何例子--只要让我知道。
发布于 2016-06-27 04:19:24
我认为最好的解决方案是像@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
https://stackoverflow.com/questions/38042196
复制相似问题