C# MVC数据注释

C# MVC数据注释,c#,entity-framework,model-view-controller,data-annotations,C#,Entity Framework,Model View Controller,Data Annotations,我正在使用实体框架。它自动生成一个答案类。但我不能修改这个类,因为如果重新生成代码,它将被覆盖 有没有一种方法/技术可以使用这个类添加数据注释 我问这个问题的原因是我有一个createanswer视图,它使用Answer类。因此,我想添加数据注释,如Required等 如果我不能向Answer类添加数据注释,那么我必须创建一个“AnswerDuplicate”类,将其传递到视图中,并在create()方法中使用它。然而,我必须将所有值从AnswerDuplicate映射到Answer的一个实例

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

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

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

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

似乎是额外的工作,因为答案是自动创建的(类和Create()方法中的绑定)。如果我能添加数据注释就好了


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

我的建议是:使用ViewModels

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

这有什么帮助?
在视图中显示它的逻辑(带有
必需的
数据类型
和验证等)可以留给ViewModel;而您的模型只是作为一个普通的all intents and purposes类(在您的例子中,是一个生成的类)

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


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

这样,您就可以节省一行接一行地编写代码来更新实体的时间——实体可能需要随着时间的推移而发生变化——如果跨不同的类重构/添加额外的属性,这可能是一个大问题(也是一个巨大的PITA)


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

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

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


以下是一个关于如何在MVC中使用ViewModels的简便教程:

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


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

我的建议是:使用ViewModels

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

这有什么帮助?
在视图中显示它的逻辑(带有
必需的
数据类型
和验证等)可以留给ViewModel;而您的模型只是作为一个普通的all intents and purposes类(在您的例子中,是一个生成的类)

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


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

这样,您就可以节省一行接一行地编写代码来更新实体的时间——实体可能需要随着时间的推移而发生变化——如果跨不同的类重构/添加额外的属性,这可能是一个大问题(也是一个巨大的PITA)


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

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

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


以下是一个关于如何在MVC中使用ViewModels的简便教程:

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


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

我认为最好的解决方案是像@Geoff James所说的那样使用ViewModels,但是如果您不喜欢添加不同的classed,您可以编写一个分部类,并向其添加
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;}
}
请记住,这两个类必须具有相同的命名空间


解决问题的另一个方法是,您可以先切换到代码

我认为最好的方法是使用ViewModels,正如@Geoff James所说,但是如果您不想添加不同的classed,您可以编写一个分部类,并向其添加
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;}
}
请记住,这两个类必须具有相同的命名空间


你的问题的另一个解决方案是,你可以先切换到代码,这可能会对你有所帮助:Orel,这个解决方案有点不可靠,但它是有效的,它符合我所寻找的。谢谢。这可能会对你有所帮助:Orel,这个解决方案有点不可靠,但它是有效的,而且它符合我所寻找的。谢谢。谢谢阿文-你的答案和奥雷尔的链接上的答案是一样的。现在,我选择使用这个解决方案。现在,它很简单,似乎需要维护的代码更少。不需要使用