I just finished a small sample application that illustrates a client/server application using Entity Framework on the server and just regular objects on the client. The client has custom changetracking and the server is able to attach the graph to a context again. Source can be found at the efcontrib page, and I guess I'm almost ready to do a proper release!
[I used Prism to build the client in a Model View Controller approach. It was a fun exercise and I'm looking forward to seeing that project released.]
The application manages employees and allows for setting a 'teamleader' on an employee: think of 'is managed by'. I thought it would be cool to send that over the wire.
Here is a screenshot of the main view of the application:
As you can see, you can 'choose' an employee. When you press that button, you will see another screen where you can enter a lastname. It will fill a grid with employees matching that criteria and allows you to choose from that list.
It is also allowed to 'add an employee'. There are actually 3 types of employees you can add: Mort, Elvis and Einstein.
On the row of teamleader, you can again press the 'choose' button, which will allow you to set a relation between the employee you are editing and another employee.
On the server, there are a few methods like this:
0 public List<Employee> GetEmployees(string lastNameBeginsWith) 1 {
2 using (InheritanceTypeContext context = new InheritanceTypeContext()) 3 {
4 5 List<Employee> employees = (from e in context.Person.OfType<Employee>().Include("TeamLeader").Include("TeamMembers")
6 where e.Lastname.StartsWith(lastNameBeginsWith) 7 select e).ToList();
8 9
10 employees.ForEach(p => context.PrepareForSerialization(p)) ; 11 return employees;
12 } 13 }
14
You can see me taking care to call the 'prepareForSerialization' on each graph that I'm returning on line 10.
The client can just use these objects like normal.
I'll look into delving into it a bit with a screencast soon.