Click here to Skip to main content
15,883,803 members
Articles / RIA
Tip/Trick

Custom DomainService Metadata Properties

Rate me:
Please Sign up or sign in to vote.
5.00/5 (2 votes)
29 Jul 2012CPOL2 min read 13.2K   3   1
This brief tutorial pretends to demonstrate how to add custom properties inside DomainService's metadata class

Introduction

This tip simply adds a custom property in the metadata generated by the DomainService metadata.

Many times, we need to add some extra properties in our metadata generated, for example, when we have to calculate something or concatenate some strings.

So, let's get started with this.

The Normal Feature

In this case, we must create a Silverlight Business Application. So, we concentrate on the ASP.NET Web Project. After that, we need to create a database file with two tables. Just like this:

At this point, we need to create the ADO.NET Entity Data Model, the Domain Service class and the metadata for that Domain Service. So, the Web ASP.NET Application looks like:

In the DomainService1.metadata.cs, you should replace the implementation of GetCities() method. Add these lines of code:

C#
public IQueryable<City> GetCities()
{
    return this.ObjectContext.Cities.Include("Country").OrderBy(c=>c.CityName);
}

Just finished this part of the tutorial.

Using the Code

Now in our Silverlight Application project, expand Views/Home.xaml and open it. After that, just add the following XAML code:

XML
<navigation:Page.Resources>
    <riacontrols:DomainDataSource x:Key="cityDDS" AutoLoad="True" QueryName="GetCities" >
        <riacontrols:DomainDataSource.DomainContext>
            <data:DomainService1 />
        </riacontrols:DomainDataSource.DomainContext>            
    </riacontrols:DomainDataSource>
</navigation:Page.Resources>
<sdk:DataGrid Grid.Row="0" 
AutoGenerateColumns="False" Margin="10" 
ItemsSource="{Binding Source={StaticResource cityDDS}, Path=Data}">
      <sdk:DataGrid.Columns>
          <sdk:DataGridTextColumn Header="CityID" 
          Binding="{Binding CityID}" />
          <sdk:DataGridTextColumn Header="City Name" 
          Binding="{Binding CityName}" />
          <sdk:DataGridTextColumn Header="Country Name" 
          Binding="{Binding Country.CountryName}" />
          <sdk:DataGridTextColumn Header="CountryID" 
          Binding="{Binding Country.CountryID}" />
      </sdk:DataGrid.Columns>
</sdk:DataGrid>

In the code above, we add a simple DataGrid showing simple data that we retrieve from the Web project via WCF RIA Services.

So, we go back to the Web project and add our Metadata extension(DomainService1.partial.cs) just like this:

C#
using System.Runtime.Serialization;

namespace MetadataExtension.Web
{
    public partial class City
    {
        [DataMember]
        public string CityData
        {
            get { return this.CityID.ToString() + " - " + this.CityName;}
        }
    }

    public partial class Country
    {
        [DataMember]
        public string CountryData
        {
            get { return this.CountryID.ToString() + " - " + this.CountryName;}
        }
    }
} 

In the code above, you must note that we add a partial class to share the existing properties on the metadata class.

Now, we need to compile our Web project and we haven't got any error.

In our Home.xaml file, we add the following lines of XAML code:

XML
<sdk:DataGrid Grid.Row="1" AutoGenerateColumns="False" 
Margin="10" ItemsSource="{Binding Source={StaticResource cityDDS}, Path=Data}">
     <sdk:DataGrid.Columns>
         <sdk:DataGridTextColumn Header="CityID" 
         Binding="{Binding CityData}" />
         <sdk:DataGridTextColumn Header="Country Name" 
         Binding="{Binding Country.CountryData}" />
     </sdk:DataGrid.Columns>
</sdk:DataGrid> 

After that, we can Run our project (F5) and see our two DataGrids showing our application.

Points of Interest

Note that we have two DataGrids in our demo. The first one shows the data directly from our DomainService metadata. The last DataGrid shows the data through the custom metadata property located on the Web project: DomainService.partial.cs file.

So, I hope you can find this brief tutorial useful. The usage of this technique is very important in some situations.

What's Next

Nothing. Just comment, rate and bookmark it if you like.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Architect
Paraguay Paraguay
hristian Amado is a professional software engineer, professional developer and trainer with over 18 years of experience building applications for Windows Desktop and the Web. Located in Asuncion, Paraguay, He's well involved in many Microsoft's technologies including XAML, C#, X++, WCF, ADO.NET and ASP.NET.

He holds a several Microsoft certifications including Microsoft Certified Professional Developer (MCPD), Microsoft Certified IT Professional, Microsoft Certified Technology Specialist and Microsoft Office Specialist.

Comments and Discussions

 
GeneralMy vote of 5 Pin
Dulce Barrios5-Sep-12 16:27
Dulce Barrios5-Sep-12 16:27 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.