What is WCF RIA services?
The latest news: WCF RIA Services is dead:
http://blogs.msmvps.com/deborahk/who-moved-my-cheese-ria-services/
If you want to use RIA Services, they have been open sourced:
http://www.openriaservices.net/blog/posts/
RIA services is a server-side technology that automatically generates client-side (Silverlight) objects that take care of the communication with the server for you and provide client-side validation.
The main object inside a RIA service is a DomainService
, usually a LinqToEntitiesDomainService
that is connected to a LinqToEntities model.
The key thing to remember in RIA services is that it's mainly a sophisticated build trick. When you create a domain service and compile your solution, a client-side representation of your domain service is generated. This client-side representation has the same interface. Suppose you create a server-side domain service CustomerService
with a method IQueryable<Customer> GetCustomersByCountry
. When you build your solution, a class is generated inside your Silverlight project called CustomerContext
that has a method GetCustomersByCountryQuery
. You can now use this method on the client as if you were calling it on the server.
Updates, inserts and deletes follow a different pattern. When you create a domain service, you can indicate whether you want to enable editing. The corresponding methods for update/insert/delete are then generated in the server-side domain service. However, the client-side part doesn't have these methods. What you have on your CustomerContext
is a method called SubmitChanges
. So how does this work:
- For updates, you simply update properties of existing customers (that you retrieved via
GetCustomersByCountryQuery
). - For inserts, you use
CustomerContext.Customers.Add(new Customer(...) {...})
. - For deletes, you use
CustomerContext.Customers.Remove(someCustomer)
.
When you're done editing, you call CustomerContext.SubmitChanges()
.
As for validation, you can decorate your server-side objects with validation attributes from the System.ComponentModel.DataAnnotations
namespace. Again, when you build your project, validation code is now automatically generated for the corresponding client-side objects.
I hope this explanation helps you a little further.