Click here to Skip to main content
11,490,003 members (68,688 online)
Click here to Skip to main content

Tagged as

Using EF DbContext with WCF Data Services

, 11 Dec 2010 CPOL 17.6K 4
Rate this:
Please Sign up or sign in to vote.
Using EF DbContext with WCF Data Services

Introduction

One of the questions that you may ask yourself with the new EF feature CTP5 is how Using DbContext with WCF Data Servicesto embed the new DbContext object inside an OData service or more particularly inside WCF Data Service. This post will supply the solution.

DbContext as WCF Data Service Data Source

Entity Framework has a good integration with WCF Data Services. All you need to do when you create a WCF Data Service with EF is to put the generated ObjectContexts a data source of the service. The following code is a simple WCF Data Service on top of EF ObjectContext

public</span /> class</span /> SchoolDataService : DataService<SchoolEntities>
{
  public</span /> static</span /> void</span /> InitializeService(DataServiceConfiguration config)
  {
    config.SetEntitySetAccessRule("</span />*"</span />, EntitySetRights.AllRead);
 
    config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
  }
}

When you will try to do the same with DbContext, you will get a surprise. The service will run but when you will try to query the data it exposes, you will get an error like the following:

The XML page cannot be displayed 
Cannot view XML input using XSL style sheet. 
Please correct the error and then click the Refresh button, or try again later. 

-------------------------------------------------------------------------------
The following tags were not closed: feed. 
Error processing resource 'http://localhost:29753/SchoolDataService.svc/Courses'. 

The reason for the error is because currently DbContextnd WCF Data Services integration isn’t working well. So what can we do for now?
Since the DbContexts a wrapper for the ObjectContextwe can expose the ObjectContexttself. In order to do that, you will have to override the CreateDataSourceethod of the service and return the ObjectContextThe following example shows a simple WCF Data Service that uses the DbContext’ve created in the previous post about EF Feature CTP fluent API:

[ServiceBehavior(IncludeExceptionDetailInFaults=true)]
public</span /> class</span /> SchoolDataService : DataService<ObjectContext>
{
  public</span /> static</span /> void</span /> InitializeService(DataServiceConfiguration config)
  {
    config.SetEntitySetAccessRule("</span />*"</span />, EntitySetRights.AllRead);
 
    config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
  }
 
  protected</span /> override</span /> ObjectContext CreateDataSource()
  {     
    var</span /> context = ((IObjectContextAdapter)new</span /> SchoolEntities()).ObjectContext;      
    context.ContextOptions.ProxyCreationEnabled = false</span />;      
    return</span /> context;    
  }    
}

A few things to notice:

  • In the CreateDataSourceI cast the DbContexto an interface it implements – IObjectContextAdapterThis interface exposes an ObjectContextroperty which is the underlying context wrapped by the DbContext
  • You must disable proxy creation because in service scenarios you mustn't use the change tracking and lazy loading behaviors that are created through runtime proxies.

Summary

DbContextntegration with WCF Data Services isn’t supported currently. In order to have a working workaround for that, you can use the underling ObjectContexthich the DbContextrap. Hopefully in the near future, this workaround won’t be needed and we will have integration out of the box.


License

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

Share

About the Author

Gil Fink
Technical Lead sparXys
Israel Israel
Gil Fink is a web development expert and ASP.Net/IIS Microsoft MVP. He is the founder and owner of sparXys. He is currently consulting for various enterprises and companies, where he helps to develop Web and RIA-based solutions. He conducts lectures and workshops for individuals and enterprises who want to specialize in infrastructure and web development. He is also co-author of several Microsoft Official Courses (MOCs) and training kits, co-author of "Pro Single Page Application Development" book (Apress) and the founder of Front-End.IL Meetup. You can read his publications at his website: http://www.gilfink.net
Follow on   Twitter   Google+   LinkedIn

Comments and Discussions

 
GeneralMy vote of 5 Pin
mohsenbz11-Apr-12 22:08
membermohsenbz11-Apr-12 22:08 
GeneralCTP5&WCF Data Services don't mix well :( Pin
DotNetWise11-Dec-10 7:50
memberDotNetWise11-Dec-10 7:50 

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

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

| Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.150520.1 | Last Updated 11 Dec 2010
Article Copyright 2010 by Gil Fink
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid