mvc miniprofiler使用DbConnection和实体框架EntityConnection

时间:2011-08-11 21:20:12

标签: asp.net-mvc entity-framework asp.net-mvc-3 mvc-mini-profiler

我觉得我错过了一些非常简单的东西,我正在将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); 
}

如何解决这个问题?

1 个答案:

答案 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不完全相同,请尝试另外尝试创建你的设置。