Silverlight WCF RIA服务(十二) 数据 2

如何添加元数据类 WCF RIA Services支持对实体类和成员的批注。批注是通过叫做元数据类的局部类来实施的。当我们想批注一个生成的实体类,并在重新生成这个实体类时不想丢失这些批注,我们使用元数据类。通过使用[MetadataTypeAttribute]属性来指定一个元数据类。
  
如何添加元数据类


WCF RIA Services支持对实体类和成员的批注。批注是通过叫做元数据类的局部类来实施的。当我们想批注一个生成的实体类,并在重新生成这个实体类时不想丢失这些批注,我们使用元数据类。通过使用[MetadataTypeAttribute]属性来指定一个元数据类。

有两种方式来添加元数据类。一种是当添加一个新的Domain Service类时,指定自动生成元数据类。还可以手动添加元数据类。下面就介绍这两种方式。

通过使用Domain Service Class模板来添加元数据类


  1. 在服务端项目中,添加一个新建项并选择Domain Service Class模板。
     
  2. 当出现Add New Domain Service Class对话框时,选择想要公开的实体。
     
  3. 勾选Generate associated classes for metadata选框。
     
  4. 点击OK。就会生成一个Domain service class的文件和一个元数据文件。在元数据类的名字中会包含.metadata,例如:DomainService1.metadata.cs
     
  5. 打开元数据类并添加一些属性如下代码所示:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    [MetadataTypeAttribute(typeof(Address.AddressMetadata))]
    public partial class Address
    {
     
        internal sealed class AddressMetadata
        {
            // Metadata classes are not meant to be instantiated.
            private AddressMetadata()
            {
            }
     
            public int AddressID;
     
            [Required]
            [StringLength(60)]
            public string AddressLine1;
     
            public string AddressLine2;
     
            [Required]
            [StringLength(30)]
            public string City;
     
            public string CountryRegion;
     
            public EntityCollection<CUSTOMERADDRESS> CustomerAddresses;
     
            public DateTime ModifiedDate;
     
            [Required]
            public string PostalCode;
     
            [Exclude]
            public Guid rowguid;
     
            public string StateProvince;
        }
    }

     

手动添加元数据

  1. 在服务端项目中,添加一个新类。这个类的名字应与想要公开的实体类的名字一致。按照惯例,在名字用包含.metadata。
     
  2. 添加关键字partial来使类成为局部类。下面的代码示例了一个匹配名字为Address实体类的局部类。
    1
    2
    3
    4
    5
    6
    C# Copy Code
    public partial class Address
    {
    }


     
  3. 在局部类中,创建一个internal类作为元数据类。如下:
    1
    2
    3
    4
    5
    6
    7
    8
    public partial class Address
    {
      internal sealed class AddressMetadata
      {
      }
    }


     
  4. 对局部类添加[MetadataTypeAttribute属性,并包含元数据类的类型。代码如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    [MetadataTypeAttribute(typeof(Address.AddressMetadata))]
    public partial class Address
    {
      internal sealed class AddressMetadata
      {
      }
    }


     
  5. 在元数据类中,添加和实体类中成员属性同名的成员属性。
     
  6. 对成员属性添加属性批注。示例代码如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    [MetadataTypeAttribute(typeof(Address.AddressMetadata))]
    public partial class Address
    {
     
        internal sealed class AddressMetadata
        {
            // Metadata classes are not meant to be instantiated.
            private AddressMetadata()
            {
            }
     
            public int AddressID;
     
            [Required]
            [StringLength(60)]
            public string AddressLine1;
     
            public string AddressLine2;
     
            [Required]
            [StringLength(30)]
            public string City;
     
            public string CountryRegion;
     
            public EntityCollection<CUSTOMERADDRESS> CustomerAddresses;
     
            public DateTime ModifiedDate;
     
            [Required]
            public string PostalCode;
     
            [Exclude]
            public Guid rowguid;
     
            public string StateProvince;
        }
    }

Powered By D&J (URL:http://www.cnblogs.com/Areas/)
原文地址:https://www.cnblogs.com/Areas/p/2172163.html