2012-01-27 3 views
0

Схватил это из образца:EntityFramework.dll DbContext конфликтует с Microsoft.data.Entity.CTP DbContext

protected override ObjectContext CreateDataSource() 
    { 
     NorthwindContext nw = new NorthwindContext(); 

     // Configure DbContext before we provide it to the 
     // data services runtime. 
     nw.Configuration.ValidateOnSaveEnabled = false; 

     // Get the underlying ObjectContext for the DbContext. 
     var context = ((IObjectContextAdapter)nw).ObjectContext; 

     // Return the underlying context. 
     return context; 
    }  

Модифицированный его использовать класс DbContext, что у меня есть в моем проекте.

EDIT: Разъяснение, что я литьем из класса DbContext так же, как образец делает:

public class NorthwindContext : DbContext 
{ 
// Use the constructor to target a specific named connection string 
public NorthwindContext() 
    : base("name=NorthwindEntities") 
{ 
    // Disable proxy creation as this messes up the data service. 
    this.Configuration.ProxyCreationEnabled = false; 

    // Create Northwind if it doesn't already exist. 
    this.Database.CreateIfNotExists(); 
} 

Выполнение кода дает мне ошибку на линии литья DbContext:

Unable для создания объекта типа «MyProject.MyDbContext» для ввода «System.Data.Entity.Infrastructure.IObjectContextAdapter».

Несмотря на то, что DbContext реализует IObjectContextAdapter:

public class DbContext : IDisposable, IObjectContextAdapter 

Я нашел несколько вопросов здесь, на SO и других гугле источников, но не решения, которые я нашел работу.

Я использую Entity Framework 4.2, попытался обновить до 4.3 beta, и я не уверен, что это застряло.

Общая цель заключается в обслуживании данных в WCF как DataService.

Update: Копаем глубже я считаю, что существует проблема неоднозначности между тем, что мой DbContext был (от EntityFramework.dll) и тип в проекте WCF (от Microsoft.data.Entity.CTP)

Не знаю, как получить то, что я хочу от обоих здесь.

+0

Не могли бы вы проверить, не является ли ваш NorthwindContext объектом ObjectContext? – ivowiblo

+0

@ivowiblo отредактирован для уточнения. – KenEucker

+0

Возможно ли, что у вас есть две разные ссылки на две разные сборки EntityFramework.dll? Похоже, у вас есть две версии IObjectContextAdapter, и нельзя преобразовать их в другую. Убедитесь, что у вас есть только одна версия EntityFramework.dll. Я думаю, что служба данных WCF (это октябрьский CTP, который вы пытаетесь?) Должен работать с последней версией EntityFramework ... – Pawel

ответ

0

Напомним, проблема заключалась в том, что двусмысленность между EntityFramework.dll и Microsoft.Data.Entity.CTP вызывала DataInitializer, который у меня был для моего DbContext потеряет функциональность.

Я решил эту проблему, заменив мой Initializer здесь:

public class MyDataInitializer : RecreateDatabaseIfModelChanges<MyData> 
{ 
    public void Seed(MyData context) 

To:

public class MyDataInitializer : IDatabaseInitializer<MyData> 
{ 
    public void InitializeDatabase(MyData context) 

И теперь я могу получить доступ к DataService.

Только один