我正在使用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>
当我测试连接时,它说成功。但是当我尝试扩展数据库时,我得到以下错误:
无法将类型'EFEntities'的对象强制转换为类型"System.Data.Entity.Infrastructure.IObjectcontextAdapter"。
我不太确定我需要改变什么才能得到这份工作,我似乎找不到其他人有这个问题。
这是一个汇编兼容性和支持EF 4.1 vs 4.2的问题:Fusion有时是一个讨厌的野兽。尝试最新的(4.37.5)测试版——它包含了对EntityFramework接口的重写。新版本的LINQPad不再静态引用EntityFramework.dll,而是使用Reflection来调用EF成员和Reflection。发出以基于您引用的实际EF程序集实现接口。这应该能解决你现在遇到的问题。如果新版本中有任何故障请告诉我。
版本4.37.5测试版为我解决了'IObjectcontextAdapter'问题。
现在可以在左侧的对象浏览器中看到实体了。
但是,我尝试执行的每个查询/语句都会导致以下错误:
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的回答的回复。