Linqpad将实体对象强制转换为IObjectContextAdapter

时间:2011-12-08 14:19:17

标签: linqpad

我正在使用Linqpad v4.37.3尝试使用实体框架4.1连接到构建。我已经能够通过向导并创建连接。我使用的连接字符串为:

<?xml version="1.0"?>

<configuration>
<connectionStrings>
    <add name="EFEntities" 
         connectionString="metadata=res://*/Common.Database.DatabaseModel.csdl|res://*/Common.Database.DatabaseModel.ssdl|res://*/Common.Database.DatabaseModel.msl;
         provider=System.Data.SqlClient;provider connection string='Data Source=ServerAddress;
         Initial Catalog=database;User ID=username;Password=password;
         MultipleActiveResultSets=True'" providerName='System.Data.EntityClient' />
</connectionStrings>
</configuration>

当我测试连接时,它说成功。但是当我尝试扩展数据库时,我收到以下错误:

  

无法投射类型&#39; EFEntities&#39;输入   &#39; System.Data.Entity.Infrastructure.IObjectcontextAdapter&#39;

我不太确定我需要改变什么来完成这项工作,而我似乎无法找到其他人解决这个问题。

2 个答案:

答案 0 :(得分:2)

这是装配兼容性和支持EF 4.1 vs 4.2的问题:Fusion有时候是一个讨厌的野兽。试试最新的(4.37.5)测试版 - 它包含对EntityFramework的接口的重写。新版本的LINQPad不再静态引用EntityFramework.dll - 而是使用Reflection来调用EF成员,而Reflection.Emit则根据您引用的实际EF程序集实现接口。这应该摆脱你遇到的问题。如果新版本中有任何故障,请告诉我。

答案 1 :(得分:0)

版本4.37.5 beta为我解决了'IObjectcontextAdapter'问题。

我现在能够在左侧的对象浏览器中看到entites。

但是,我正在尝试执行的每个查询/语句都会导致以下错误:

Value cannot be null.
Parameter name: key

它似乎发生在甚至击中EF部分之前。

如果我尝试将以下内容作为C#程序运行:

void Main()
{
    HibernatingRhinos.Profiler.Appender.EntityFramework.EntityFrameworkProfiler.Initialize();
}

或只是

void Main()
{
    for (int i = 0; i++; i < 100)
    {
        // nothing
    }
}
  • 我得到了同样的错误,所以似乎没有与EF直接相关。但是,如果我直接连接到SQL数据库,我执行语句没有问题。

我正在使用EF 4.1。

编辑:对不起,这应该是回答Joe Albahari的回答。