C# 是否将验证附加到MVC控制器/视图中使用的EF对象?

C# 是否将验证附加到MVC控制器/视图中使用的EF对象?,c#,asp.net,asp.net-mvc,entity-framework,C#,Asp.net,Asp.net Mvc,Entity Framework,我们正在创建一个快速项目(CRUD表单),并决定跳过视图模型,直接在控制器和视图中使用EF实体。由于我不习惯这种方法,我对处理验证感到困惑 例如:DB字段的长度为25。在我看来,如何将其转移(如果可以)到验证约束?如果我使用的是一个中间模型,我会将属性附加到模型属性,这样就可以了。我如何直接使用EF对象来实现这一点?谢谢 最简单的方法是使用System.ComponentModel.DataAnnotations anmespace中的DataAnnotations属性 MVC尊重这些,并将在任

我们正在创建一个快速项目(CRUD表单),并决定跳过视图模型,直接在控制器和视图中使用EF实体。由于我不习惯这种方法,我对处理验证感到困惑


例如:DB字段的长度为25。在我看来,如何将其转移(如果可以)到验证约束?如果我使用的是一个中间模型,我会将属性附加到模型属性,这样就可以了。我如何直接使用EF对象来实现这一点?谢谢

最简单的方法是使用System.ComponentModel.DataAnnotations anmespace中的DataAnnotations属性

MVC尊重这些,并将在任何失败时填充ModelError集合。在您的示例中,可以为该名称空间添加一个using语句,然后用

[StringLength(25)]

到此为止。

您需要使用部分“buddy”元类,并用验证属性装饰它

例如,假设您的实体是“Foo”:

[MetadataType(typeof(FooMetadata))]
public partial class Foo {}

public class FooMetadata
{
    //apply validation attributes to properties
    [Required]
    [Range(0, 25)]
    [DisplayName("Some Neato Property")]
    public int SomeProperty { get; set; }
}
有关更多信息,请参阅MSDN上的此链接:


干杯。

这可以在Ef生成的类上使用MetadataType属性来完成。EF生成分部类。因此,可以对其进行扩展并添加属性。然后可以编写另一个具有成员装饰的“buddy类”。比如说

[MetadataType(typeof(EFGeneratedClass_MetaData))]
public partial class EFGeneratedClass
{
}

public partial class EFGeneratedClass_MetaData
{
    [Required]
    [Display(Name="Member1 Display")]
    public string Member1 {get; set;}
}

非常感谢。你有关于这个的更多信息的链接吗?谢谢只是补充一下。似乎将公共可见性修饰符添加到属性名称中就可以做到这一点。我忘了我把它取下来了,我都快发疯了,想知道为什么它不再工作了。谢谢我也忘了把这些房产标记为公共的,这让我抓狂,想弄明白为什么它们不能验证!顺便说一句,当MVC 2第一次出现()时,Scott Guthrie写了一篇关于验证元数据和伙伴类的博文。如果您的域模型与您的web项目位于不同的项目中,该怎么做?它们是否都需要在同一名称空间中?这是使用分部类。分部类不能跨越多个项目,因此在这种情况下不起作用。