在我的应用程序中,我的模型结构用DataAnnotations修饰。这有助于我的验证完美,但是我不确定如何在没有双重输入的情况下将这些DataAnnotations保留到我的ViewModel。
基本上我很懒,而且我试图尽可能保持干燥。
class User
{
[Required]
public string FirstName {get; set; }
[Required]
public string LastName {get; set; }
public datetime RegistrationDate {get; }
}
class CreateUserViewModel
{
public string FirstName {get; set; }
public string LastName {get; set; }
}
第一个类永远不会被View使用,但它包含应用程序所需的所有DataAnnotations。第二个类总是由CreateUser View使用,但我不想重新应用DataAnnotations。这可能吗?如果是这样,怎么样?
答案 0 :(得分:5)
请参阅MetadataType属性,该属性允许您将DataAnnotations移动到单独的类中。
答案 1 :(得分:3)
即使Todd provided a very nice approach使用元数据类型,我也不确定是否会将它们推荐为防弹解决方案。
<强>临强>
<强> N 强>:
考虑模型实体的复杂性,尤其是关于具有某些其他实体的属性子集(在类型和名称方面)的百分比。
有时候你可能必须牺牲一些代码才能拥有更清晰,特别是高度可维护的代码。混合两者使得维护更加困难。
答案 2 :(得分:1)
尝试:
interface IAmALazyUser
{
[Required]
string FirstName {get; set; }
[Required]
string LastName {get; set; }
}
class User : IAmALazyUser
{
public string FirstName {get; set; }
public string LastName {get; set; }
public datetime RegistrationDate {get; }
}
class CreateUserViewModel : IAmALazyUser
{
public string FirstName {get; set; }
public string LastName {get; set; }
}
我不推荐它,因为你添加耦合只是为了不能为视图模型添加验证。
答案 3 :(得分:0)
我不相信有一个简单的解决方案。您将不得不重复一点,并注释您的视图模型。如果您使用最新的实体框架是您的数据层,那么您可以使用带注释的实体类来利用数据验证。因此,即使您忘记注释视图模型,当它保存数据上下文时也会抛出验证异常。