ASP.NET MVC,Linq to SQL Data Annotation Validation

Oma*_*mar 12 asp.net data-annotations

我正在尝试将数据注释实现到我的Linq to SQL对象.生成.dbml文件,我不知道如何在不触及生成的源代码的情况下向对象添加数据注释.

我试图将数据注释添加到对象的单独的部分类中,但它没有识别它,也没有Intelli意义.

jph*_*ard 22

正如我在这个问题的原始答案中所说,你应该使用一个界面.我发布的答案(标记为已接受)表示使用课程.这不是那么好.由于以下原因,接口是更好的选择:

  • 如果LINQ类中的名称与接口中的名称不匹配,编译器将为您标记它
  • 无法实例化接口,因此这可以防止类用户意外地使元数据类型不稳定
  • 如果使用Resharper(或类似),则可以从LINQ类中自动提取接口
  • 接口比空类更简洁
  • 如果您针对接口而不是类进行编程(这是一个很好的做法),那么您已经有了一个可以用作元数据类型的接口

对于一个名为"User"的类,为它创建一个接口(比如'IUser'),然后更新部分User类的定义,如下所示:

[MetadataType(typeof(IUser))]
public class User : IUser
Run Code Online (Sandbox Code Playgroud)

然后,在IUser界面中,将相应的Data Annotation属性添加到属性中:

[Required]       
[StringLength(50, ErrorMessage = "Username cannot exceed 50 characters")]
string Username { get; set; }
Run Code Online (Sandbox Code Playgroud)


jph*_*ard 9

对于一个名为"User"的类,为它创建一个接口(比如'IUser'),然后更新部分User类的定义,如下所示:

[MetadataType(typeof(IUser))]
public class User : IUser
Run Code Online (Sandbox Code Playgroud)

然后,在IUser界面中,将相应的Data Annotation属性添加到属性中:

[Required]       
[StringLength(50, ErrorMessage = "Username cannot exceed 50 characters")]
string Username { get; set; }
Run Code Online (Sandbox Code Playgroud)


Oma*_*mar 6

Linq to SQL生成对象类为partial.实现数据注释的一种简单方法是创建自己的对象的部分类,将[MetadataType(typeof(YourDataAnnotationClass))]放在您创建的部分类上.

例:

// Linq to SQL Class
public partial class Article 
{
   public string Title { get; set; }
   ...... etc
}
Run Code Online (Sandbox Code Playgroud)

使用元数据为要验证的每个字段创建自己的MetaData类

public class MyMetaDataClass
{
    [Required]
    [Range(5,20)]
    public string Title { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

为要添加元数据的Object类创建一个Partial Class,在本例中为Articles类:

[MetadataType(typeof(MyMetaDataClass))]
public partial class Article { }
Run Code Online (Sandbox Code Playgroud)

注意:您不需要在类中指定任何内容,只需要指定元数据类型.