我在EF4.0中使用数据库优先方法创建了一个实体模型。
我希望能够在没有app.config文件的情况下使用我的模型,因为我的连接设置存储在单独的配置介质中。这迫使我直接使用ObjectContext类,传入一个有效的EF连接字符串。以下是我实例化ObjectContext的方法:
var ctx = new ObjectContext(entityConnectionString);
这正确执行,我可以使用ctx.ExecuteStoreCommand()成功地对db运行SQL命令。
我生成的模型的名称是MyEntities。这是从ObjectContext派生的,可以在MyEntities.Designer.cs中看到:
public partial class MyEntities : ObjectContext
但是,如果我尝试将ctx转换为MyEntities对象:
MyEntities myEntities = (MyEntities)ctx;
我收到错误说
无法投射'ctx'(其实际类型为 'System.Data.Objects.ObjectContext')到'MyNamespace.MyEntities'
我希望能够使用ctx,就好像它是MyEntities的一个实例。这将允许我访问EF生成的实体(ctx.entity1,ctx.entity2)。 还有另一种方法吗?
答案 0 :(得分:1)
您无法将对象强制转换为您想要的任何类型。它实际上必须属于那种类型。
看起来你真正要做的就是将连接字符串传递给MyEntities
类。假设生成的代码已经没有提供,只需添加一个带有构造函数的新的分部类,该构造函数接受一个字符串并将其传递给基础ObjectContext
。
public partial class MyEntities : ObjectContext
{
public MyEntities(string connectionString) : base(connectionString)
{ }
}
然后使用此代码:
var ctx = new MyEntities(entityConnectionString);