EntityFramework.dll DbContext与Microsoft.data.Entity.CTP DbContext冲突

时间:2012-01-27 19:59:11

标签: wcf c#-4.0 entity-framework-4

从样本中抓取这个:

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类。

编辑:澄清我正在从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的行上出错:

无法将“MyProject.MyDbContext”类型的对象强制转换为“System.Data.Entity.Infrastructure.IObjectContextAdapter”。

尽管DbContext实现了IObjectContextAdapter:

public class DbContext : IDisposable, IObjectContextAdapter

我在SO和其他谷歌上找到了几个问题,但我找不到任何解决方案。

我正在使用Entity Framework 4.2,尝试更新到4.3 beta,我不确定是否卡住了。

总体目标是将WCF中的数据作为DataService提供。

更新:深入挖掘我发现我的DbContext(来自EntityFramework.dll)和WCF项目中的类型(来自Microsoft.data.Entity.CTP)之间存在歧义问题

不确定如何从这里得到我想要的东西......

1 个答案:

答案 0 :(得分:0)

提醒一下,问题在于EntityFramework.dll和Microsoft.Data.Entity.CTP之间存在歧义,导致我的DbContext丢失的DataInitializer失去了功能。

我在这里更换了我的初始化程序解决了这个问题:

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

要:

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

我现在可以访问我的DataService。

只有一个