我觉得我错过了一些非常简单的东西,我正在将MVC Miniprofiler集成到我的项目中,但我找不到用正确的连接实例化我的上下文的方法,因为它不是EF Code First而我的模型继承自ObjectContext,这是我的代码
public static MyModel GetDataBaseModel()
{
DbConnection conn = new MySqlConnection(Utils.GetConnectionString());
// this returns a DBConnection
DbConnection profiledConnection = MvcMiniProfiler.Data.ProfiledDbConnection.Get(conn);
//my model needs an EntityConnection, so this is not possible
return new MyModel(profiledConnection);
}
如何解决这个问题?
答案 0 :(得分:1)
我假设MyModel
是实体框架设计器创建的上下文,对吧?可以从DbConnection和MetadataWorkspace
组合创建EntityConnection。我还假设EF Designer已经为您的app / web.config添加了一个connectionstring-property,其中包含以下内容:
metadata=res://*/Content.MyModel.csdl|res://*/Content.MyModel.ssdl|res://*/Content.MyModel.msl;
这些是组成MetadataWorkspace的3个组件。要从这些信息创建EntityConnection,您必须提供数组中的每个文件:
string[] paths =
{
// "res://" refers to a embedded resource within your DLL, this is automatically done if
// you've used the EF designer.
"res://*/Content.MyModel.csdl",
"res://*/Content.MyModel.ssdl",
"res://*/Content.MyModel.msl"
};
Assembly[] assembliesToConsider = new Assembly[]
{
typeof(MyModel).Assembly
};
System.Data.Metadata.Edm.MetadataWorkspace workspace = new System.Data.Metadata.Edm.MetadataWorkspace(paths, assembliesToConsider);
EntityConnection connection = new EntityConnection(workspace, profiledConnection);
我没有使用MvcMiniProfiler(现在首先安装它)对此进行测试,但是可能存在一些问题,如果profiled-connection的行为与原始的MySqlConnection不完全相同,请尝试另外尝试创建你的设置。