12

我正在尝试对我的 Linq to SQL 对象实施数据注释。.dbml 文件已生成,我不确定如何在不接触生成的源代码的情况下向对象添加数据注释。

我试图将数据注释添加到对象的单独部分类中,但它无法识别它,也没有 Intelli 感知。

4

4 回答 4

22

正如我在这个问题的原始答案中所说,您应该使用界面。在我的(标记为已接受)之后发布的答案说要使用课程。这不太好。接口是更好的选择,原因如下:

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

对于名为“User”的类,为其创建一个接口(例如“IUser”),然后更新部分 User 类的定义,如下所示:

[MetadataType(typeof(IUser))]
public class User : IUser

然后,在您的 IUser 界面中,将适当的 Data Annotation 属性添加到属性中:

[Required]       
[StringLength(50, ErrorMessage = "Username cannot exceed 50 characters")]
string Username { get; set; }
于 2009-10-13T04:57:48.950 回答
9

对于名为“User”的类,为其创建一个接口(例如“IUser”),然后更新部分 User 类的定义,如下所示:

[MetadataType(typeof(IUser))]
public class User : IUser

然后,在您的 IUser 界面中,将适当的 Data Annotation 属性添加到属性中:

[Required]       
[StringLength(50, ErrorMessage = "Username cannot exceed 50 characters")]
string Username { get; set; }
于 2009-10-11T02:27:33.557 回答
6

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

例子:

// Linq to SQL Class
public partial class Article 
{
   public string Title { get; set; }
   ...... etc
}

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

public class MyMetaDataClass
{
    [Required]
    [Range(5,20)]
    public string Title { get; set; }
}

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

[MetadataType(typeof(MyMetaDataClass))]
public partial class Article { }

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

于 2009-10-11T05:37:01.227 回答
3

谢谢,但问题是 MS 将 MetadataTypeAttrubute 的原型定义为

[AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
public sealed class MetadataTypeAttribute : Attribute

所以,你必须使用类而不是接口


来自中国森林李:李晓强 xiaoqianglinsen@163.com (MSN) lixiaoqiang@webservice.com.cn

于 2009-11-26T09:06:04.950 回答