使用EF 4.1和Mini-profiler 1.7.使用模型优先,从现有数据库扫描.EF生成一个派生自ObjectContext/ObjectSet的类,而不是DbContext/DbSet.我无法找到控制它的地方.
我尝试了流行的解决方案,但无济于事.
由于受挫,我还尝试使用显式的EntityConnection直接创建我的Context,这是直接使用ProfiledDbConnection创建的.我想绕过任何连接不是预期类型的机会.
public HomeController() {
try {
string[] paths = new string[] { @"res://*/" };
Assembly[] assys = new Assembly[] { Assembly.GetExecutingAssembly() };
MetadataWorkspace mw = new MetadataWorkspace(paths, assys);
string cnx = WebConfigurationManager.ConnectionStrings["XXXX"].ConnectionString;
DbConnection cx = MvcMiniProfiler.Data.ProfiledDbConnection.Get(new SqlConnection(cnx), MiniProfiler.Current);
//DbConnection cx = Database.DefaultConnectionFactory.CreateConnection(cnx);
EntityConnection ec = new EntityConnection(mw, cx);
db = new MyContextEntities(ec);
}
catch (Exception ex) {
Trace.WriteLine("EDM failed: " + ex.Message);
db = new MyContextEntities();
}
}
Run Code Online (Sandbox Code Playgroud)
我已经验证了正确的路径.但是,当实际运行LINQ查询时,我们得到一个异常:
无法将类型为"MvcMiniProfiler.Data.ProfiledDbConnection"的对象强制转换为"System.Data.SqlClient.SqlConnection".
违规声明是:
return query.ToList();
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪更有趣,因为显然EF内部的东西绝对需要SqlConnection!
在system.Data.SqlClient.SqlCommand.set_DbConnection(DbConnection值)处于System.Data.Common.Utils.CommandHelper.SetStoreProviderCommandState(EntityCommand entityCommand,EntityTransaction …